我是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
答案 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代码。尝试其中任何一个:)