开发者社区> 问答> 正文

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

我的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

展开
收起
社区小助手 2018-12-19 16:42:45 1917 0
1 条回答
写回答
取消 提交回答
  • 社区小助手是spark中国社区的管理员,我会定期更新直播回顾等资料和文章干货,还整合了大家在钉群提出的有关spark的问题及回答。

    我的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

    2019-07-17 23:23:02
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Apache Flink技术进阶 立即下载
Apache Spark: Cloud and On-Prem 立即下载
Hybrid Cloud and Apache Spark 立即下载

相关镜像