2016-09-30 28 views
1

我拼花文件加載到SQL上下文中這樣的:爲什麼使用group by子句時,pyspark 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| 
+----------------+----------+ 

不過,如果我使用GROUPBY從rdd集。我得到了不同的結果:

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

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

兩個方法的x的計數是相同的,但null是完全不同的。看起來像sql語句不正確地計數爲null與組。你能指出我做錯了什麼嗎?

感謝,

+0

你能打印出你的DataFrame架構嗎? – eliasah

回答

3

數(名)將排除空值,如果你給COUNT(*),它會給你一個空值也是如此。

請嘗試以下。

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