Apache Spark 中的持久化选项

Posted

技术标签:

【中文标题】Apache Spark 中的持久化选项【英文标题】:Persist option in Apache Spark 【发布时间】:2015-07-27 06:26:44 【问题描述】:

您好,我是 Apache Spark 的新手,我正在使用 java 中的 Apache spark sql 查询配置单元表。

这是我的代码

    SparkConf sparkConf = new 
SparkConf().setAppName("Hive").setMaster("local");   
   JavaSparkContext ctx = new JavaSparkContext(sparkConf);
    HiveContext sqlContext = new 
org.apache.spark.sql.hive.HiveContext(ctx.sc());
    org.apache.spark.sql.Row[] results = sqlContext.sql("Select * from 
Tablename where Column='Value'").collect();
    org.apache.spark.sql.Row[] results = sqlContext.sql("Select * from 
Tablename where Column='Value1'").collect();

我还尝试在同一个应用程序中运行两个不同的查询,我看到它每次都与 hive 元存储建立连接。如何解决这个问题,并告诉我如何有效地使用持久选项。

【问题讨论】:

如果查询不相关,那么 Hive 元存储被查询两次是有意义的。如果您发布包含查询的程序可能会有所帮助。 感谢您的回复...另一个查询只不过是查询同一个表,同一列的不同值 【参考方案1】:

在执行这两个查询之前调用sqlContext.cacheTable("Tablename") 可能会有所帮助。

根据文档,它可以满足您的需求。

在内存中缓存指定的表。

【讨论】:

非常感谢。我对此还有另一个问题。我在这里在java中使用spark,所以当我第一次运行它时它会缓存表可能需要几分钟才能得到结果,但是当我第二次再次运行它时它会比之前更快吗? 每次运行程序时都会完成缓存和网络 I/O。缓存的优点是您可以在同一程序中重用中间结果。但是,Spark 集群的 JVM 预热可能会稍微加快您的程序。 另外我还有一个疑问......我在 Web 服务中使用 Spark sql,在其中我为上述查询传递不同的列值以及如何为每个请求使用相同的配置单元上下文跨度> 我不是 Web 服务专家,但如果您使用的是 JAX-WS,那么这可能会对您有所帮助:***.com/a/11096654/4815083 ...我在 hadoop 多节点集群中运行 spark 时遇到问题,您能帮帮我吗?

以上是关于Apache Spark 中的持久化选项的主要内容,如果未能解决你的问题,请参考以下文章

Apache Spark 2.0 模型持久性

在 Apache spark SQL 中,我们可以回滚事务吗

Apache Spark基础知识

Apache Spark基础知识

Apache Spark:主要使用理念

Spark IMF传奇行动第18课:RDD持久化广播累加器总结