PySpark平等筛选问题

2024-04-18 20:43:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图过滤一个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()在幕后使用了一个相等性检查,但是如果是的话,我不知道它为什么返回不同的结果。在


Tags: 数据方法dfshowcount地方filter事情
2条回答

df[df['behavior']=='bulled'].count()与熊猫配合得很好。在

为了使Pyspark中的列相等,可以尝试下面的选项。在

  1. 在测向滤波器(df.行为=='购买').count()
  2. 在测向滤波器(df[“behavior”]=='购买').count()
  3. 从pyspark.sql.functions导入列 测向滤波器(col(“behavior”)=='购买').count()

希望这有帮助。在

谨致问候

尼拉吉

而不是去做

df[df['behavior']=='Bought'].count()

试试看

^{pr2}$

对其余的查询执行相同的操作。在

相关问题 更多 >