为什么pyspark sql不能正确使用group by子句?

时间:2016-09-30 05:19:26

标签: apache-spark pyspark apache-spark-sql pyspark-sql

我将镶木地板文件加载到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 set中的groupBy。我得到了不同的结果:

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

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

两个方法的x计数相同,但null非常不同。似乎sql语句没有正确地计算null与group。你能指出我做错了吗?

谢谢,

1 个答案:

答案 0 :(得分:3)

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

请尝试以下。

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