2016-12-05 36 views
1

在一个火花壳我用下面的代码从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文件)读取?

注意,我不缓存数据帧,也没有我使用的火花会议

回答

1

每个动作火花之后忘掉加载的数据和任何中间变量珍惜你们之间使用。

所以,如果你调用4分的动作一个接一个,从每个时间开始计算的所有内容。

原因是简单,火花通过构建DAG来实现,它可以通过读取d来可视化操作路径行动起来,而不是执行它。

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

1

TL重建数据帧; DR数据帧不超过RDD不同。你可以期望适用相同的规则。

像这样简单的计划答案是肯定的。它会读取数据,每场演出虽然,如果动作不要求所有的数据(如here0它不会阅读完整的文件。

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

+0

我没有按照你最后的说法。如果内存可用(即使未调用cache()或persist()时也不会尝试将rdd保留在内存中)?正确的文档链接将详细解释这种行为是什么? –