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

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

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

  1. 我创建了一个 tempView
  2. 选择所需的列
  3. 使用 forEachDataFrame 转换为 Map
  4. 将该映射作为广播变量传递给执行程序。

但是我发现

  1. 有很多复杂查询的结果不能直接存储在Map
  2. 表非常大,因此创建大尺寸 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

【问题讨论】:

    标签: java apache-spark apache-spark-dataset apache-spark-2.0 apache-spark-2.3


    【解决方案1】:

    您可以广播 DataFrame。见documentation

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-28
      • 2011-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多