我试图过滤一个Spark数据帧(v1.5.0),看到了一个奇怪的结果。首先是结果
df.groupby('behavior').count().show()
+---------+-------+
| behavior| count|
+---------+-------+
| Bought|1582345|
| Looked|2154789|
+---------+-------+
这与数据帧中的行数是一致的。另外,我们看到在这个列中只有两个“行为”(购买和查看)。这就是事情变得奇怪的地方。在
^{pr2}$怎么了?数据帧的其他行去了哪里?最后,为了让事情变得更奇怪,使用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()
在幕后使用了一个相等性检查,但是如果是的话,我不知道它为什么返回不同的结果。在
df[df['behavior']=='bulled'].count()与熊猫配合得很好。在
为了使Pyspark中的列相等,可以尝试下面的选项。在
希望这有帮助。在
谨致问候
尼拉吉
而不是去做
试试看
^{pr2}$对其余的查询执行相同的操作。在
相关问题 更多 >
编程相关推荐