Caching 是否会在每次操作时触发从外部源读取的数据帧?

Caching 是否会在每次操作时触发从外部源读取的数据帧?,caching,apache-spark,spark-csv,Caching,Apache Spark,Spark Csv,在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()会再次显示新行吗?如

在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会话重新创建数据帧

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

有了这样简单的计划,答案是肯定的。它将读取每个节目的数据,但若动作不需要所有数据(如此处0),它将不会读取完整的文件


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

每次操作后,spark都会忘记加载的数据和中间变量值

所以,如果您一个接一个地调用4个操作,它将从每次开始计算所有内容

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


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

我没有听你的上一句话。如果内存可用(即使没有调用cache()或persist()),也不会尝试将rdd保留在内存中?正确的文档链接将如何详细解释此行为?