在 Apache spark 中跨执行者共享数据
Sharing data across executors in Apache spark
我的 SPARK 项目(用 Java 编写)需要跨执行程序访问(SELECT 查询结果)不同的表。
这个问题的一个解决方案是:
- 我创建了一个临时视图
- select 所需列
- 使用 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
对此有用的方法?
火花版本:2.3.0
您可以广播一个DataFrame。参见 documentation
我的 SPARK 项目(用 Java 编写)需要跨执行程序访问(SELECT 查询结果)不同的表。
这个问题的一个解决方案是:
- 我创建了一个临时视图
- select 所需列
- 使用 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
对此有用的方法?
火花版本:2.3.0
您可以广播一个DataFrame。参见 documentation