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

时间:2018-12-18 04:51:01

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

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

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

  1. 我创建一个tempView
  2. 选择必填列
  3. 使用 forEach DataFrame转换为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 VERSION:2.3.0

1 个答案:

答案 0 :(得分:1)

您可以广播一个DataFrame。参见documentation