如何通过fucnction将组转换为数据框

时间:2017-07-18 10:37:56

标签: scala apache-spark apache-spark-sql

嗨,我是scala和spark的新手。我正在通过spark sql尝试分组。当我尝试保存或查看输出时。它会抛出以下错误。

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.

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:3)

问题表明您希望以csv格式在文本文件中编写分组数据。如果我的分析正确无误,那么groupBy上的 rdd应该是您想要的解决方案 groupBy dataframe需要{ {1}}要遵循。因此,您必须将aggregation转换为dataframe,应用rdd,最后将输出写为groupBy文件

csv

我希望答案很有帮助

答案 1 :(得分:1)

如果您只想返回分组的项目,那么您只需选择未分组列的第一项,然后选择分组列,如下所示:

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

答案 2 :(得分:0)

您不需要groupBy,因为您不会在分组的列上进行任何汇总。您应该改用distinct

val fp = filtertable.select($"_1", $"_2", $"_3").distinct()