我正在尝试过滤Spark DataFrame(v.1.5.0)并且看到了一个特殊的结果。首先是结果
df.groupby('behavior').count().show()
+---------+-------+
| behavior| count|
+---------+-------+
| Bought|1582345|
| Looked|2154789|
+---------+-------+
这与我的数据框中的行数一致。此外,我们看到列中只有两个“行为”(Bought and Looked)。这就是事情变得奇怪的地方。
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()
在幕后使用了等式检查,但如果是,我不知道为什么它会返回不同的结果。
答案 0 :(得分:1)
而不是
df[df['behavior']=='Bought'].count()
试
df.filter(df.behavior == 'Bought').count()
对其余查询执行相同的操作。
答案 1 :(得分:0)
df [df [' behavior'] ==' Bought']。count()适用于Pandas。
为了在Pyspark中等同列,您可以尝试以下选项。
希望这有助于。
此致
Neeraj