【问题标题】:I have sample dataframe with null values, i want the null values to be shifted to the right side columnsvalues我有带有空值的示例数据框,我希望将空值转移到右侧的列值
【发布时间】:2020-09-19 01:28:37
【问题描述】:

示例输入数据框:

+---+---+----+----+----+
|  A|  B|   C|   D|   E|
+---+---+----+----+----+
|  1|  2|   3|   4|   5|
|  6|  7|null|   8|   9|
| 10| 11|  12|null|null|
+---+---+----+----+----+

预期的输出数据帧:

+---+---+----+----+----+
|  A|  B|   C|   D|   E|
+---+---+----+----+----+
|  1|  2|   3|   4|   5|
|  6|  7|   8|   9|null|
| 10| 11|  12|null|null|
+---+---+----+----+----+

【问题讨论】:

  • 第一次最好将它作为文本,只需将整个内容用 ``` 包裹在数据框上方和下方的单独行中。
  • 是的!我是新来的,现在我已经编辑了问题,请检查!
  • 看起来好多了!我稍微修正了格式。不幸的是,我对 Spark 一点也不熟悉,所以我无法帮助您解决这个问题。
  • 没问题!感谢您的编辑!

标签: scala dataframe apache-spark rdd


【解决方案1】:

试试这个:

var df = List(("1","2","3","4","5"),("6","7",null,"8","9"),("10","11","12",null,null),(null,"13",null,"14",null)).toDF("A","B","C","D","E")
df.show

+----+---+----+----+----+
|   A|  B|   C|   D|   E|
+----+---+----+----+----+
|   1|  2|   3|   4|   5|
|   6|  7|null|   8|   9|
|  10| 11|  12|null|null|
|null| 13|null|  14|null|
+----+---+----+----+----+

val cols = df.columns.size
df = df.withColumn("ct",split(concat_ws("-",df.columns.map(x=>col(x)):_*),"-"))
df.select((0 until cols).map(r => df.col("ct").getItem(r)): _*).toDF((0 until cols).map(r=>df.columns(r)):_*).show

+---+---+----+----+----+
|  A|  B|   C|   D|   E|
+---+---+----+----+----+
|  1|  2|   3|   4|   5|
|  6|  7|   8|   9|null|
| 10| 11|  12|null|null|
| 13| 14|null|null|null|
+---+---+----+----+----+

【讨论】:

    猜你喜欢
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 2021-01-16
    • 2022-08-22
    相关资源
    最近更新 更多