1

在 spark shell 上,我使用以下代码从 csv 文件中读取

val df = spark.read.format("org.apache.spark.csv").option("header", "true").option("mode", "DROPMALFORMED").csv("/opt/person.csv") //spark here is the spark session
df.show()

假设这显示 10 行。如果我通过编辑在 csv 中添加新行,df.show()再次调用会显示新行吗?如果是这样,这是否意味着数据框在每个操作上都从外部源(在本例中为 csv 文件)读取?

请注意,我没有缓存数据帧,也没有使用 spark 会话重新创建数据帧

4

2 回答 2

1

TL;DR DataFrame 与 RDD 没有什么不同。您可以期望同样的规则适用。

有了这样的简单计划,答案是肯定的。它会读取每个节目的数据,但如果操作不需要所有数据(如 here0,它不会读取完整的文件。

在一般情况下(复杂的执行计划)数据可以从 shuffle 文件中访问。

于 2016-12-05T11:40:09.410 回答
1

在每个动作之后,spark 都会忘记加载的数据以及您在两者之间使用的任何中间变量值。

因此,如果您一个接一个地调用 4 个动作,它每次都会从头开始计算所有内容。

原因很简单,Spark 通过构建 DAG 来工作,它可以可视化从读取数据到操作的操作路径,然后执行它。

这就是缓存和广播变量存在的原因。开发人员有责任知道和缓存,如果他们知道他们将重用该数据或数据帧 N 次。

于 2016-12-05T17:51:47.410 回答