很一般的问题的道歉:
我有一个pyspark数据帧,并以以下方式对其应用fill.na
和when
条件:
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如何建立对数据集的惰性评估有关系吗?
谢谢。