我的SPARK项目(用Java编写)需要跨执行程序访问(选择查询结果)不同的表。
这个问题的一个解决方案是:
- 我创建一个临时视图
- 选择必填列
- 使用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
您可以广播数据帧。请参阅文档