2017-08-28 93 views
1

要刪除重複的行,我嘗試這個SQL如何解決這個火花斯卡拉SQL錯誤消息

val characters = MongoSpark.load[sparkSQL.Character](sparkSession) 
characters.createOrReplaceTempView("characters") 
val testsql = sparkSession.select("SELECT * FROM characters GROUP BY title") 
testsql.show() 

但此SQL使此錯誤消息。 如果你知道這個問題,請回答這個問題。

感謝您

Parsing command: SELECT * FROM characters GROUP BY title 
Exception in thread "main" org.spache.spark.sql.AnalysisException: 
expression 'characters.`url`' is neither present in the group by, nor is it an aggregate function 
Add to Add to group by or wrap in first() if you don't care which value you get.;; 

,然後我試圖這樣,但我不知道這是正確的解決方案....

請回答這個問題。謝謝!

val characters = MongoSpark.load[sparkSQL.Character](sparkSession) 
characters.createOrReplaceTempView("characters") 
val testsql = sparkSession.select("SELECT * FROM characters") 
testgrsql = testsql.groupBy("title") 
testgrsql.show() 
+0

SELECT colums'VAL testsql = sparkSession.sql(「選擇從標題字符GROUP BY稱號「)',如果你沒有使用任何聚合函數。 – mrsrinivas

+0

嗨,如果下面的答案已經解決了您的問題,請考慮[接受它](http://meta.stackexchange.com/q/5234/179419)或添加您自己的解決方案。所以,這表明你已經找到了解決方案。 – mrsrinivas

回答

1

錯誤消息說明了一切,

解析命令:SELECT * FROM字符GROUP BY標題

異常線程 「main」 org.spache.spark.sql.AnalysisException: 表達式'characters.url'既不存在於組中,也不是聚合函數

如果您不在意您得到的是什麼價值,請將其添加到羣組或由第一個()包裝。

所以使用就可以了,如果你想第一個URL價值爲每個標題,然後在first(url) GROUPBY提到

characters.createOrReplaceTempView("characters") 
val testsql = sparkSession.sql("SELECT title, first(url) FROM characters GROUP BY title")