我想過濾一個Spark DataFrame(v。1.5.0)並看到一個特殊的結果。首先結果PySpark平等過濾器問題
df.groupby('behavior').count().show()
+---------+-------+
| behavior| count|
+---------+-------+
| Bought|1582345|
| Looked|2154789|
+---------+-------+
這與我的數據框中的行數一致。另外,我們看到該列中只有兩個「行爲」(「買」和「看」)。這是事情變得奇怪的地方。
df[df['behavior']=='Bought'].count()
1025879
df[df['behavior']=='Looked'].count()
698742
發生了什麼事?數據框的其他行在哪裏去了?最後,爲了讓事情變得更加陌生,使用isin()方法提供了正確的結果。
df[df['behavior'].isin(['Bought'])].count()
1582345
df[df['behavior'].isin(['Looked'])].count()
2154789
我不知道這裏發生了什麼。我會期望這兩個過濾器至少能夠返回一致的結果(錯誤或者兩者都是正確的)。任何幫助將不勝感激!
編輯
運行下面的過濾操作如下建議,所有的結果與不正確的答案是一致的。
df.filter(df['behavior']=='Bought').count()
1025879
df.filter(df.behavior=='Bought').count()
1025879
df.filter(F.col('behavior')=='Bought').count()
1025879
所以看起來平等檢查是什麼錯。有趣的是,isin()功能似乎仍然有效。我本來以爲isin()在幕後使用了相等檢查,但如果是這樣,我不知道它爲什麼會返回不同的結果。