Python 从各个列中的Pyspark数据帧中删除空值

Python 从各个列中的Pyspark数据帧中删除空值,python,dataframe,apache-spark,pyspark,Python,Dataframe,Apache Spark,Pyspark,我有一个pyspark数据帧,如下所示: +--------------------+--------------------+ |名称|值| +--------------------+--------------------+ |空|空| |空|空| |空|空| |空|空| |空|空| |空|空| |空|空| |空|空| |空|空| |空|空| |id | null| |名称|空| |年龄|零| |食物|零| |空| 1| |空|乔| |空| 47| |空|比萨饼| +-----------

我有一个pyspark数据帧,如下所示:

+--------------------+--------------------+
|名称|值|
+--------------------+--------------------+
|空|空|
|空|空|
|空|空|
|空|空|
|空|空|
|空|空|
|空|空|
|空|空|
|空|空|
|空|空|
|id | null|
|名称|空|
|年龄|零|
|食物|零|
|空| 1|
|空|乔|
|空| 47|
|空|比萨饼|
+--------------------+--------------------+

我想从每个单独的列中删除空值,这样非空数据就可以对齐了

所需输出为:

+--------------------+--------------------+
|名称|值|
+--------------------+--------------------+
|id | 1|
|姓名|乔|
|年龄| 47|
|食物|比萨饼|
+--------------------+--------------------+


我曾经尝试过通过类似于
df.dropna(how='any'/'all')
的方法来删除空值,但是通过分离列并删除空值,很难将它们重新连接在一起。

试试这个方法-用scala编写,但可以移植到pyspark,只需很少的更改

df.选择(从数组中映射)(收集列表(“名称”).as(“名称”),
收集列表(“值”).作为(“值”).作为(“地图”))
。选择(分解外部($“映射”)。作为(序号(“名称”、“值”))
.show(假)
/**
* +----+-----+
*|名称|值|
* +----+-----+
*| id | 1|
*|姓名|乔|
*|年龄| 47|
*|食物|比萨饼|
* +----+-----+
*/

pyspark版本相同的
(df.select(F.map\u从数组(F.collect\u list(“name”)、F.collect\u list(“value”)))。别名(“map”)。select(F.explode\u outer(“map”)。别名(“name”、“value”))。show()
,做得很好,学到了一些新东西+1.