Apache Spark DataFrame 是不是为每个处理从数据库加载数据,或者除非另有说明,否则它是不是使用相同的数据?

Posted

技术标签:

【中文标题】Apache Spark DataFrame 是不是为每个处理从数据库加载数据,或者除非另有说明,否则它是不是使用相同的数据?【英文标题】:Does Apache Spark DataFrame loads data from DB for every processing or does it use the same data unless told otherwise?Apache Spark DataFrame 是否为每个处理从数据库加载数据,或者除非另有说明,否则它是否使用相同的数据? 【发布时间】:2015-08-13 09:21:02 【问题描述】:

我们有一个用例,我们需要搜索满足特定条件的特定记录。我们需要识别这些记录中的多种情况。我们计划使用 apache Spark Dataframes。 Apache Spark 数据帧是否为我们计划执行的每个搜索从 db 加载表数据,或者它是否在 spark 集群节点之间加载和分发表数据一次,然后在这些节点上运行搜索条件,直到被明确告知加载数据来自数据库?

【问题讨论】:

我不太确定我理解你想要做什么。一旦执行第一个操作,就会创建 Dataframe。 Dataframe 是不可变的。 【参考方案1】:

如果您使用 .cache() 或 .persist() 命令创建数据帧,那么它会尝试将数据帧保存在内存中。

如果您不使用 .cache 创建它,那么它会按需从源数据集中读取数据。

如果没有足够的可用内存来保存缓存中的完整数据集,那么 Spark 将动态重新计算一些块。

如果您的源数据集不断变化,那么您可能希望首先创建一个相当静态的导出数据集。

查看Spark RDD persist documentation(DataFrames 也是如此)以更好地了解您可以做什么。

【讨论】:

以上是关于Apache Spark DataFrame 是不是为每个处理从数据库加载数据,或者除非另有说明,否则它是不是使用相同的数据?的主要内容,如果未能解决你的问题,请参考以下文章

类型不匹配;找到:org.apache.spark.sql.DataFrame 需要:org.apache.spark.rdd.RDD

值 createGlobalTempView 不是 apache.org.spark.sql.DataFrame 的成员

在 Apache Spark 中拆分 DataFrame

Spark Rdd DataFrame操作汇总

如何按 Seq[org.apache.spark.sql.Column] 降序排序 spark DataFrame?

如何在 Apache Spark ML API 中从“DataFrame”创建一个“Vector”?