【发布时间】:2017-02-13 23:51:37
【问题描述】:
我们的应用程序使用长时间运行的 spark 上下文(就像 spark RPEL)使用户能够在线执行任务。我们大量使用 Spark 广播来处理维度数据。按照惯例,我们广播维度表并使用数据框 API 将事实表与其他维度表连接起来。其中一个维度表非常大,大约有 100k 条记录和 15MB 的内存大小(kyro 序列化只是少了几 MB)。
我们看到,去规范化数据帧上的每个 spark JOB 都会导致所有维度一遍又一遍地广播。每次广播较大的表需要约 7 秒。我们正在尝试找到一种方法,让维度表在每个上下文生命周期中只广播一次。我们尝试了 sqlcontext 和 sparkcontext 广播。
除了 spark 广播还有其他选择吗?或者有没有办法减少数据帧的内存占用(压缩/序列化等 - post-kyro 仍然是 15MB :( )?
【问题讨论】:
-
什么时候有表?它们是否在程序开始时创建并在程序期间发送给所有工作人员?
-
这些是隐藏的配置单元表,维度表在程序启动期间广播,用户在初始加载后继续整理数据。
标签: apache-spark spark-dataframe