在 Apache Spark 中跨执行程序共享数据

Posted

技术标签:

【中文标题】在 Apache Spark 中跨执行程序共享数据【英文标题】:Sharing data across executors in Apache spark 【发布时间】:2018-12-18 04:51:01 【问题描述】:

我的 SPARK 项目(用 Java 编写)需要跨执行器访问(SELECT 查询结果)不同的表。

解决此问题的一种方法是:

    我创建了一个 tempView 选择所需的列 使用 forEachDataFrame 转换为 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 中跨执行程序共享数据的主要内容,如果未能解决你的问题,请参考以下文章

在 Vuejs 中跨不同组件共享数据

在 Vuejs 中跨不同组件共享数据

无法在 Safari 13 中跨 .test 子域共享 cookie

在 iOS9 中跨应用程序共享 cookie

关于hive on spark会话的共享状态

如何获取有关当前执行程序 Apache-Spark 的元数据?