Apache spark 触发多个CSV读取?

Apache spark 触发多个CSV读取?,apache-spark,pyspark,Apache Spark,Pyspark,在我的spark应用程序中,我阅读了一次包含许多CSV的目录。 但是,在DAG中,我看到多个CSV读取 为什么spark会多次读取CSV,或者它不是一个真实的表示;实际上Spark读过一次 Spark UI屏幕截图: 如果数据帧未缓存,Spark将多次读取它们 val df1 = spark.read.csv("path") val df2_result = df1.filter(.......).save(......) val df3_result = df1.

在我的spark应用程序中,我阅读了一次包含许多CSV的目录。 但是,在DAG中,我看到多个CSV读取

  • 为什么spark会多次读取CSV,或者它不是一个真实的表示;实际上Spark读过一次
Spark UI屏幕截图:

如果数据帧未缓存,Spark将多次读取它们


    val df1 = spark.read.csv("path")
    val df2_result = df1.filter(.......).save(......)
    val df3_result = df1.map(....).groupBy(...).save(......)

在这里,df2_结果和df3_结果都将导致从csv文件重建df1。 要避免这种情况,可以这样缓存。DF1将从csv生成一次,第二次不会从文件生成


    val df1 = spark.read.csv("path")
    df1.cache()
    val df2_result = df1.filter(.......).save(......)
    val df3_result = df1.map(....).groupBy(...).save(......)


如果我在DAG中有多个动作,我理解这种行为。我只有一个动作。我将在读取后添加缓存,然后再次看到DAG。我发现了问题。。我只有一个操作,但我创建了中间数据帧,并在python变量中分配它们,因此spark在DAG中为这些数据帧创建差异分支,并再次读取CSV。因此,是的,在我的例子中,缓存解决了这个问题,并且只读取一次。