在spark-sql中执行SQL语句

Sky*_*er9 3 scala apache-spark apache-spark-sql

我有一个格式如下的文本文件:

ID,Name,Rating
1,A,3
2,B,4
1,A,4
Run Code Online (Sandbox Code Playgroud)

我想找到 Spark 中每个 ID 的平均评分。这是我到目前为止的代码,但它不断给我一个错误:

val Avg_data=spark.sql("select ID, AVG(Rating) from table")
Run Code Online (Sandbox Code Playgroud)

错误:org.apache.sapk.sql.AnalysisException:分组表达式序列为空,并且 'table'.'ID' 不是聚合函数。将 '(avg(CAST(table.'Rating' AS BIGINT)) 包装为 'avg(Rating)')' 在窗口函数中.........

小智 7

AVG()一个聚合函数,所以你也需要一个group by

val Avg_data=spark.sql("select ID, AVG(Rating) as average from table group by ID")
Run Code Online (Sandbox Code Playgroud)

你应该Avg_data

+---+-------+
|ID |average|
+---+-------+
|1  |3.5    |
|2  |4.0    |
+---+-------+
Run Code Online (Sandbox Code Playgroud)