spark数据集:如何计算列中唯一值的出现次数

时间:2016-10-31 22:28:47

标签: apache-spark spark-dataframe

尝试使用spark数据集apis读取CSV文件并计算特定字段中唯一值的出现次数。我认为应该有效的一种方法是不按预期行事。让我知道我在俯瞰什么。我发布的工作以及下面的错误方法。

// get all records from a column
val professionColumn = data.select("profession")

// breakdown by professions in descending order
// *****  DOES NOT WORKS  ***** //
val  breakdownByProfession = professionColumn.groupBy().count().collect()

// *****  WORKS  ***** //
val  breakdownByProfessiond = data.groupBy("profession").count().sort("count")  // WORKS

println ( s"\n\nbreakdown by profession \n")
breakdownByProfession.show()

另外,请告诉我哪种方法更有效。我的猜测是第一个(首先尝试的原因) 另外,使用数据集API

在文本文件中保存此类操作的输出的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

在第一种情况下,由于没有指定分组列,因此整个数据集被视为一个组 - 即使数据集中只存在一个列,此行为仍然存在。因此,您应始终将列表列表传递给groupBy()

现在两个选项是:data.select("profession").groupBy("profession").countdata.groupBy("profession").count。在大多数情况下,这两种替代方案的性能将完全相同,因为Spark试图尽可能地向操作员推送预测(即列选择)。因此,即使在data.groupBy("profession").count的情况下,Spark在进行分组之前首先选择profession列。您可以通过查看执行计划 - org.apache.spark.sql.Dataset.explain()

来验证这一点

答案 1 :(得分:0)

在groupBy转换中,您需要提供以下列名称

 $code->code = $_POST['code'];
 $code->save();
 print_r($code->getErrors());