【发布时间】:2014-09-23 09:40:26
【问题描述】:
我是 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 是不是跟多 group by 有关系。
现在我正在运行这个复杂的查询
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
【问题讨论】:
-
您确实需要提供两件事:1.
sample data只需几列和几行就足够了,2. 该示例中的expected result。我的直接猜测是您应该停止在这些查询中使用 ID,但如果没有这 2 项,我就无法判断 -
样本数据ID |类别 |标记 1 |一个 | 40 2 |一个 | 44 1 |乙 | 50 2 |乙 | 40 2 |乙 | 30 输出应该是 id |类别 |平均 1 |一个 | 40 2 |一个 | 44 1 |乙 | 50 2 |乙 | 35
-
您能否验证样本数据和预期结果 - 我对此问题进行了编辑,因为我不明白
-
我编辑了问题,请检查一下
-
这是我见过的最奇怪的“平均”方式。 5 行输入“平均”回到 5 行输出,但只有一个平均值是输出,所有其他都是未更改的原始输入。诡异的。 3 条输入线的平均值是 1 条输出线(a 类的平均值是 (40+50+30)/3 = 40;b 类的平均值也是 44+40/2 = 42。我建议您重新考虑问题。
标签: sql apache-spark