【发布时间】: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
【问题讨论】:
标签: java apache-spark apache-spark-dataset apache-spark-2.0 apache-spark-2.3