apache-spark-sql - Spark 连接 - 保存为数据帧或分区配置单元表
问题描述
我正在从事一个测试数据接近 100 万条记录和 4 个此类文件的项目。任务是执行大约 40 次计算,连接来自 4 个不同文件的数据,每个文件接近 1gb。
目前,我使用saveastable将每个数据保存到 spark 表中并执行操作。例如-table1 与table2 连接,结果保存到table3。Table3(1 和 2 的结果)与 table4 等连接。最后,我将这些计算保存在不同的表上并生成报告。
整个过程大约需要 20 分钟,我担心的是,当这段代码进入生产环境时,数据可能比这多 5 倍,是否会出现性能问题。
或者最好以分区方式保存每个文件中的这些数据,然后执行连接并到达最终结果集。
PS - 目标是获得即时结果,并且可能存在用户正在更新文件中的几行并期望即时结果的情况。而且数据是按月计算的,基本上每个月一次,里面有分类和子分类。
解决方案
您所做的一切都很好,但请确保在每次资源扩展操作之后缓存 + 计数,而不是写入所有连接,然后在最后一步保存。
如果中间不缓存,spark 会在最后一步从上到下运行整个 DAG,这可能会导致 JVM 在操作过程中溢出并溢出到磁盘,进而影响执行时间。
推荐阅读
- jenkins - Jenkins Pipeline:如何在超时时打印挂起进程的堆栈跟踪?
- c - GDB 通过 step 深入系统调用的问题
- ios - 未调用 preferredScreenEdgesDeferringSystemGestures
- node.js - SSL 安全连接是否可以在没有浏览器调用的情况下使用?
- php - TYPO3:Extbase 模型中的性能
- python - 将替换字符串 lambda 应用于 python 中的所有行
- javascript - u"'' 值的日期格式无效。它必须是 YYYY-MM-DD 格式我需要它是 MM-DD-YYYY
- r - 使用 Phoenix 将 R 连接到 Hadoop 的问题
- shell - 如何将 Jenkins 凭据传递给 Dockerfile/Shell?
- uwp - 我无法在 codedui 中选择 UWP ListView 项目