使用pyspark在数据框中动态填充空列

时间:2018-09-08 11:42:49

标签: pyspark

我的情况是我的数据框有3列,在这三列中,有可能在column3中有空值。该DF中的总记录为200万。 我需要通过mysql数据库中的值填充此空值(基本上调用返回值的函数)。我可以考虑遍历每一行,但是鉴于数据量,这可能会花费更多时间。 我如何实现这一点,我知道如何用静态值填充空值,但这是完全动态的。 谢谢您的帮助 问候, 罗宾

2 个答案:

答案 0 :(得分:0)

如果我正确地回答了您的问题,那么如果以前有一个Null值,则希望在列中具有一些唯一值。一种可能的方法是下面的代码,该代码检查Null列中的value值。如果找到Null,它将使用monotonically_increasing id替换Null。在其他情况下,原始值将保留。

test_df = spark.createDataFrame([
('a','2018'),
                  ('b',None),
                  ('c',None)
], ("col_name","value"))

test_df.withColumn("col3", when(col("value").isNull(), row_number()).otherwise(col("value"))).show(truncate=False)

结果:

+--------+-----+------------+
|col_name|value|col3        |
+--------+-----+------------+
|a       |2018 |2018        |
|b       |null |403726925824|
|c       |null |609885356032|
+--------+-----+------------+

PS:对于将来的请求,如果您可以包括数据集中的样本和所需的输出,那将是很好的。这通常有助于理解问题。

答案 1 :(得分:0)

对于上述测试用例,我将使用以下命令将value列仅更新为两行。 test_df.withColumn(“ value”,when(col(“ value”)。isNull(),monotonically_increasing_id())。otherwise(col(“ value”)))。show(truncate = False)

感谢所有评论和帮助。