Spark联接-另存为数据框或分区的配置单元表

时间:2018-08-17 18:15:46

标签: apache-spark-sql

我正在一个项目,该项目的测试数据接近100万条记录和4个此类文件。 任务是执行约40次计算,并结合来自4个不同文件的数据,每个文件的大小接近1gb。

当前,我使用 saveastable 将每个数据保存到spark表中并执行操作。例如-table1与table2联接,结果保存到table3中。 Table3(结果为1和2)与table4连接,依此类推。最后,我将这些计算结果保存到另一个表中并生成报告。

整个过程大约需要20分钟,而我担心的是,当此代码进入生产环境时,其数据可能是此数据的5倍以上,就会出现性能问题。

或者最好以分区方式保存每个文件中的数据,然后执行联接并到达最终结果集。

P.S-目标是获得即时结果,并且在某些情况下,用户可能会从文件中更新几行并期望即时结果。数据是每月一次的,基本上每个月一次,其中包含类别和子类别。

1 个答案:

答案 0 :(得分:1)

您所做的一切都很好,但是请确保在每次资源扩展操作之后进行缓存+计数,而不是编写所有联接,然后在最后一步进行保存。

如果您没有在两者之间进行缓存,则spark将在最后一步从头到尾运行整个DAG,这可能会导致JVM在操作过程中溢出并溢出到磁盘上,进而影响执行时间。