为什么 pyspark sql 不能正确计算 group by 子句?
Why pyspark sql does not count correctly with group by clause?
我像这样将 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 语句没有正确计算 group by 的空值。你能指出我做错了什么吗?
谢谢,
count(name) 将排除空值,如果你给 count(*) 它也会给你空值。
试试下面的方法。
sqlCtx.sql('SELECT count(*), name from type_table group by name order by count(*)').show()
我像这样将 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 语句没有正确计算 group by 的空值。你能指出我做错了什么吗?
谢谢,
count(name) 将排除空值,如果你给 count(*) 它也会给你空值。
试试下面的方法。
sqlCtx.sql('SELECT count(*), name from type_table group by name order by count(*)').show()