2017-07-18 69 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()) 

我希望答案是有帮助的

相关问题