我在Scala中使用Apache spark在数据框中的多个列上运行聚合,例如
select column1, sum(1) as count from df group by column1
select column2, sum(1) as count from df group by column2
实际聚合比总和(1)更复杂,但除此之外。 上面示例的查询字符串是针对我想要聚合的每个变量编译的,我通过Spark sql上下文执行每个字符串以创建表示相关聚合的相应数据框
我的问题的本质是我必须为成千上万的变量做这件事。
我的理解是Spark每次执行聚合时都必须“读取”主数据帧。
有没有其他方法可以更有效地完成这项工作?
感谢您阅读我的问题,并提前感谢您的帮助。
答案 0 :(得分:2)
在使用源数据构建DataFrame后继续缓存数据框。另外,为了避免在代码中编写所有查询,请将它们放在文件中并在运行时传递该文件。在代码中有一些可以读取文件的内容,然后您可以运行查询。关于此方法的最佳部分是您可以通过更新文件而不是应用程序来更改查询。只要确保找到一种方法来为输出提供唯一的名称。
在PySpark中,它看起来像这样。
SELECT *
FROM your_table
ORDER BY period_Id, day_Id