首页 > 解决方案 > Spark 连接 - 保存为数据帧或分区配置单元表

问题描述

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

目前,我使用saveastable将每个数据保存到 spark 表中并执行操作。例如-table1 与table2 连接,结果保存到table3。Table3(1 和 2 的结果)与 table4 等连接。最后,我将这些计算保存在不同的表上并生成报告。

整个过程大约需要 20 分钟,我担心的是,当这段代码进入生产环境时,数据可能比这多 5 倍,是否会出现性能问题。

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

PS - 目标是获得即时结果,并且可能存在用户正在更新文件中的几行并期望即时结果的情况。而且数据是按月计算的,基本上每个月一次,里面有分类和子分类。

标签: apache-spark-sql

解决方案


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

如果中间不缓存,spark 会在最后一步从上到下运行整个 DAG,这可能会导致 JVM 在操作过程中溢出并溢出到磁盘,进而影响执行时间。


推荐阅读