我有一个像这样的pyspark数据框:
+--------------------+--------------------+
| name| value|
+--------------------+--------------------+
| null| null|
| null| null|
| null| null|
| null| null|
| null| null|
| null| null|
| null| null|
| null| null|
| null| null|
| null| null|
| id| null|
| name| null|
| age| null|
| food| null|
| null| 1|
| null| Joe|
| null| 47|
| null| pizza|
+--------------------+--------------------+
我想从每个单独的列中删除空值,以便将非空数据排成一行。
所需的输出是:
+--------------------+--------------------+
| name| value|
+--------------------+--------------------+
| id| 1|
| name| Joe|
| age| 47|
| food| pizza|
+--------------------+--------------------+
我曾尝试通过类似df.dropna(how='any'/'all')
的方式删除空值,但是通过分离列并删除空值,但是将它们重新连接在一起变得很困难。
答案 0 :(得分:1)
尝试此操作-用Scala编写,但只需少量更改即可移植到pyspark
df.select(map_from_arrays(collect_list("name").as("name"),
collect_list("value").as("value")).as("map"))
.select(explode_outer($"map").as(Seq("name", "value")))
.show(false)
/**
* +----+-----+
* |name|value|
* +----+-----+
* |id |1 |
* |name|Joe |
* |age |47 |
* |food|pizza|
* +----+-----+
*/