从Pyspark Dataframe中的各个列中删除空值

时间:2020-06-15 19:42:24

标签: python dataframe apache-spark pyspark

我有一个像这样的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')的方式删除空值,但是通过分离列并删除空值,但是将它们重新连接在一起变得很困难。

1 个答案:

答案 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|
      * +----+-----+
      */