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