为啥 pyspark sql 不能正确计算 group by 子句?

Posted

技术标签:

【中文标题】为啥 pyspark sql 不能正确计算 group by 子句?【英文标题】:Why pyspark sql does not count correctly with group by clause?为什么 pyspark sql 不能正确计算 group by 子句? 【发布时间】:2016-09-30 05:19:26 【问题描述】:

我像这样将 parquet 文件加载到 sql 上下文中:

sqlCtx = SQLContext(sc)
rdd_file = sqlCtx.read.parquet("hdfs:///my_file.parquet")
rdd_file.registerTempTable("type_table")

然后我运行这个简单的查询:

sqlCtx.sql('SELECT count(name), name from type_table group by name order by count(name)').show()

结果:

+----------------+----------+
|count(name)     |name      |
+----------------+----------+
|               0|      null|
|          226307|         x|
+----------------+----------+

但是,如果我使用 rdd 集中的 groupBy。我得到了不同的结果:

sqlCtx.sql("SELECT name FROM type_table").groupBy("name").count().show()

+----------+------+
| name     | count|
+----------+------+
|         x|226307|
|      null|586822|
+----------+------+

这两种方法的 x 计数相同,但 null 完全不同。似乎 sql 语句没有正确计算 null 和 group by。你能指出我做错了什么吗?

谢谢,

【问题讨论】:

你能打印出你的 DataFrame 架构吗? 【参考方案1】:

count(name) 将排除空值,如果你给 count(*) 它也会给你空值。

试试下面。

sqlCtx.sql('SELECT count(*), name from type_table group by name order by count(*)').show()

【讨论】:

以上是关于为啥 pyspark sql 不能正确计算 group by 子句?的主要内容,如果未能解决你的问题,请参考以下文章

为啥针对 S3 的 pyspark sql 查询返回空值

为啥我的应用程序不能以 pandas_udf 和 PySpark+Flask 开头?

如何修复:pyspark.sql.utils.IllegalArgumentException:列功能的类型不正确?

当 python 函数比它们快时,为啥我们使用 pyspark UDF? (注。不用担心 spark SQL 命令)

为啥我不能在 SQL 中创建游标?

使用光流的汽车跟踪。为啥向量不能正确绘制