举个例子
def transform(myDF: DataFrame) (implicit spark: SparkSession): DataFrame = {
// do something
}
val myDf1 = spark.read.format("avro").load("hdfs://myavrofile")
val myDf2 = transform(myDf1)
上面的代码是不是效率很低?因为首先我们必须将数据复制到函数中,并将数据重新分配到新的dataframe中。
或者spark内部优化,使dataframe只是一个指针。
1条答案
按热度按时间ubbxdtey1#
再加上Hamza的回答,如果你想从它创建一个分支(例如
val df1 = transform1(df); val df2 = transform2(df)
),缓存父 Dataframe 是一个好习惯。因为spark创建了一个沿袭,如果你不缓存父 Dataframe ,在每个动作中,计算都是从一开始就完成的。所以:你可以检查缓存的效果,通过检查每个转换的 Dataframe 的
explain("formatted")
方法。最后,如果你的数据集很重,你可以通过调用persist
而不是cache
来改变StorageLevel
。