在spark SQL中执行两个group by时出错

时间:2014-07-31 12:34:22

标签: sql apache-spark

我是sparksql的新手,我试图用它来试验某些查询。

这是我试图执行的查询

sqlContext.sql(SELECT id , category ,AVG(mark) FROM data GROUP BY id, category)

运行查询时,我没有得到正确的输出。

而不是类别的实际值我得到一些值1,2,3。

我长期坚持这个奇怪的错误

但是当我做一个简单的选择语句和一个组完全正常工作时

sqlContext.sql(SELECT id , category  FROM data)

sqlContext.sql(SELECT id  ,AVG(mark) FROM data GROUP BY id)

有什么问题? SPARKSQL是否与多个组有关。

现在我正在运行这个复杂的查询

sqlContext.sql(SELECT data.id , data.category, AVG(id_avg.met_avg) FROM (SELECT  id, AVG(mark) AS met_avg FROM data GROUP BY id) AS id_avg, data GROUP BY data.category, data.id)

这样可行,但需要较长时间才能执行。

请帮助

示例数据:

|id | category | marks  
| 1 |        a |  40  
| 2 |        b |  44 
| 3 |        a |  50  
| 4 |        b |  40  
| 1 |        a |  30 

输出应为:

|id | category | avg  
| 1 |        a |  35  
| 2 |        b |  44 
| 3 |        a |  50  
| 4 |        b |  40  

2 个答案:

答案 0 :(得分:0)

请尝试此查询:

SELECT
      data.id
    , data.category
    , AVG(mark)
FROM data
GROUP BY
      data.id
    , data.category

基于此样本数据:

|id | category | marks  
| 1 |        a |  40  
| 2 |        b |  44 
| 3 |        a |  50  
| 4 |        b |  40  
| 1 |        a |  30 

输出将是:

|id | category | avg  
| 1 |        a |  35  
| 2 |        b |  44 
| 3 |        a |  50  
| 4 |        b |  40  

并且,使用group by无法生成以下预期行:

| 5 |        a |  30 

答案 1 :(得分:0)

这是sparksql中的一个错误。 尝试使用下一个版本。它是固定的。

我使用spark-1.0.2获得了正确的输出

它也适用于纯scala代码。尝试其中任何一个:)