在 Apache Spark 中跨执行程序共享数据
Posted
技术标签:
【中文标题】在 Apache Spark 中跨执行程序共享数据【英文标题】:Sharing data across executors in Apache spark 【发布时间】:2018-12-18 04:51:01 【问题描述】:我的 SPARK 项目(用 Java 编写)需要跨执行器访问(SELECT 查询结果)不同的表。
解决此问题的一种方法是:
-
我创建了一个 tempView
选择所需的列
使用 forEach 将
DataFrame
转换为 Map
。
将该映射作为广播变量传递给执行程序。
但是我发现
-
有很多复杂查询的结果不能直接存储在
Map
表非常大,因此创建大尺寸 Map
并将其作为广播变量传递给执行程序听起来效率不高。
我们可以使用load
加载内存中的表吗?可以在执行程序之间共享?
是void org.apache.spark.sql.Dataset.createOrReplaceTempView(String viewName)
或void org.apache.spark.sql.Dataset.createGlobalTempView(String viewName) throws AnalysisException
方法对这个目的有用吗?
SPARK 版本:2.3.0
【问题讨论】:
【参考方案1】:您可以广播 DataFrame。见documentation
【讨论】:
以上是关于在 Apache Spark 中跨执行程序共享数据的主要内容,如果未能解决你的问题,请参考以下文章