python - PySpark 平等过滤器问题

标签 python apache-spark pyspark apache-spark-sql

我正在尝试过滤 Spark DataFrame (v. 1.5.0) 并看到一个奇怪的结果。先说结果

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

最佳答案

而不是做

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

尝试

df.filter(df.behavior == 'Bought').count()

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

关于python - PySpark 平等过滤器问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45449446/

相关文章:

scala - 将日期转换为时间戳的问题,Spark 日期从 unix_timestamp 转换为时间戳返回 null

Python 3 网站在使用用户代理欺骗时检测抓取工具

python - 在 azure 存储上创建连接时如何处理错误

scala - Spark SQL datediff 以秒为单位

python - 当键的数量与每个键的值的数量相比较小时,PySpark reduceByKey 不断失败

python - 替换 PySpark 中的字符串

scala - Spark Dataframe - 窗口函数 - 插入和更新输出的滞后和超前

python - 等效于 Python 和 PySpark 中的 R data.table 滚动连接

python - 解压元组的二维列表

Python3并行处理opencv视频帧