[英]Executing SQL Statements in spark-sql
我有一個以下格式的文本文件:
ID,Name,Rating
1,A,3
2,B,4
1,A,4
我想找到spark中每個ID的平均評分。 這是我到目前為止的代碼,但是一直在給我一個錯誤:
val Avg_data=spark.sql("select ID, AVG(Rating) from table")
錯誤:org.apache.sapk.sql.AnalysisException:分組表達式序列為空,並且'table'。'ID'不是聚合函數。 在窗口函數中將'(avg(CAST(table.'Rating'AS BIGINT))包裝為'avg(Rating)')'.........
AVG()
是一個聚合函數,因此您也需要一個分組
val Avg_data=spark.sql("select ID, AVG(Rating) as average from table group by ID")
您應該將Avg_data
作為
+---+-------+
|ID |average|
+---+-------+
|1 |3.5 |
|2 |4.0 |
+---+-------+
您需要將group by子句與avg一起使用。
1.DataFrame df
+---+----+------+
| ID|Name|Rating|
+---+----+------+
| 1| A| 3|
| 2| B| 4|
| 1| A| 4|
+---+----+------+
2.將df注冊為臨時表並使用GROUP BY和AVG()編寫查詢
df.registerTempTable("table")
val avg_data=spark.sql("select ID,avg(Rating) from table group by ID")
avg_data.show
+---+-----------+
| ID|avg(Rating)|
+---+-----------+
| 1| 3.5|
| 2| 4.0|
+---+-----------+
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.