尝试使用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
在文本文件中保存此类操作的输出的最佳方法是什么?答案 0 :(得分:1)
在第一种情况下,由于没有指定分组列,因此整个数据集被视为一个组 - 即使数据集中只存在一个列,此行为仍然存在。因此,您应始终将列表列表传递给groupBy()
。
现在两个选项是:data.select("profession").groupBy("profession").count
与data.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());