-1

示例输入数据框:

+---+---+----+----+----+
|  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|
+---+---+----+----+----+
4

1 回答 1

0

试试这个:

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|
+---+---+----+----+----+
于 2020-05-31T19:09:03.930 回答