Pyspark-Fill.na位置变化。

很一般的问题的道歉:

我有一个pyspark数据帧,并以以下方式对其应用fill.nawhen条件:

df2 = df.withColumn('A',F.when( (F.col('B') != 'qqq') & (F.col('C) != 'vvv'),1).otherwise(0)).na.fill('').groupby('X').sum("A").toPandas()

如果我对X的特定值进行计数,则得到这样的计数:

df2.loc[df2['X'] == '2018-12-10'] 
# count value is 5000

但是,如果我将代码的fill.na部分放在开头,则会得到不同的结果:

df2 = df.na.fill('').withColumn('A',1).otherwise(0)).groupby('X').sum("A").toPandas()

df2.loc[df2['X'] == '2018-12-10'] 
# count value is 170000

通过深入研究,我发现在第二种情况下,when条件被忽略,因此我得到了更多的记录。

有人可以告诉我这可能是什么原因吗?它与spark如何建立对数据集的惰性评估有关系吗?

谢谢。

sunsung1 回答:Pyspark-Fill.na位置变化。

在第一种方法中,当您的列BCnull时,列A将变为0,因此您的总和将较低。另一方面,在第二种方法中,当您首先用空字符串替换null值时,列A将变为1,因此最终的总和将更大。

本文链接:https://www.f2er.com/3124471.html

大家都在问