Spark будет читать их несколько раз, если DataFrame не кэшируется.
val df1 = spark.read.csv("path")
val df2_result = df1.filter(.......).save(......)
val df3_result = df1.map(....).groupBy(...).save(......)
Здесь df2_result и df3_result оба приведут к перестроению df1 из файлов csv. Чтобы избежать этого, вы можете кешировать вот так. DF1 будет собран один раз из CSV, а второй раз он не будет собран из файлов.
val df1 = spark.read.csv("path")
df1.cache()
val df2_result = df1.filter(.......).save(......)
val df3_result = df1.map(....).groupBy(...).save(......)