簡體   English   中英

在spark-sql中執行SQL語句

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM