2017-07-18 114 views
2

嗨,我是scala和spark的新手。我正在嘗試通過spark sql進行分組。當我試圖保存或查看輸出時,會拋出以下錯誤。如何通過fucnction將數據組轉換爲數據幀

value coalesce is not a member of org.apache.spark.sql.RelationalGroupedDataset 

這是我的代碼。

val fp = filtertable.select($"_1", $"_2", $"_3",$"_4").groupBy("_1", "_2","_3") 
fp.show() // throws error 
fp.coalesce(1).write.format("csv").save("file://" + test.toString()) //throws error. 

任何幫助將不勝感激。

+0

你有使用'後執行聚合函數groupBy' – philantrovert

+0

但是沒有必要對我進行彙總。 – Rakshita

+0

你想用列「_4」做什麼? –

回答

0

如果你只想要回分組的項目,那麼你可以選擇一個未分組列的第一個項目,然後像這樣在分組的列選擇:

val fp = filtertable 
    .select($"_1", $"_2", $"_3", $"_4") 
    .groupBy($"_1", $"_2", $"_3") 
    .agg(first($"_4")) 
    .select($"_1", $"_2", $"_3") 
+0

這是一種非常冗長的寫作方式:'val fp = filtertable.select($「_ 1」,$「_ 2」,$「_ 3」)。distinct()'。 ;) –

+0

啊,太專注於回答問題而不是提供一個好的解決方案! – wllmtrng

2

問題暗示你想要以csv格式將分組數據寫入文本文件。如果我的分析是正確的,那麼groupByrdd應該是你在dataframe渴望groupBy的解決方案需要aggregation應遵循。所以,你將不得不轉換dataframerdd,應用groupBy終於寫出輸出到csv文件

val fp = df.select($"_1", $"_2", $"_3",$"_4") 
     .rdd 
     .groupBy(row => (row(0), row(1), row(2))) // similar to groupBy("_1", "_2","_3") on dataframe 
     .flatMap(kv => kv._2) // taking the grouped data 
     .map(_.mkString(",")) // making data in csv format 

    fp.coalesce(1).saveAsTextFile("file://" + test.toString()) 

我希望答案是有幫助的