Apache spark 由于洗牌,在数据帧被再次持久化后触发取消持久化数据帧
假设我们有以下场景:Apache spark 由于洗牌,在数据帧被再次持久化后触发取消持久化数据帧,apache-spark,Apache Spark,假设我们有以下场景: val df: DataFrame = dataframe val df2 = df.partition(col("id").cache ... some transformations/joins by "id" resulting `val dfTransformed` ... val df3 = dfTransformed.groupBy("name").agg(<someaggregations>) val df4 = df3.partition(col
val df: DataFrame = dataframe
val df2 = df.partition(col("id").cache
...
some transformations/joins by "id" resulting `val dfTransformed`
...
val df3 = dfTransformed.groupBy("name").agg(<someaggregations>)
val df4 = df3.partition(col("id").cache
...
some transformations/joins by "id"...
...
val-df:DataFrame=DataFrame
val df2=df.partition(col(“id”).cache
...
某些通过“id”进行的转换/连接导致`val dfTransformed`
...
val df3=dfTransformed.groupBy(“名称”).agg()
val df4=df3.partition(col(“id”).cache
...
通过“id”进行的某些转换/连接。。。
...
我的问题是,我是否需要在某个时候取消持久化df2?或者当我持久化df4时,它会自动覆盖df2
如果我需要取消持久化df2,那么何时取消持久化
如果我这样做:
val df3 = df2.groupBy("name").agg(<someaggregations>)
df2.unpersist
val df4 = df3.partition(col("id").cache
val df3 = df2.groupBy("name").agg(<someaggregations>)
val df4 = df3.partition(col("id").cache
df2.unpersist
val df3=df2.groupBy(“名称”).agg()
df2.unpersist
val df4=df3.partition(col(“id”).cache
我不会因为从内存中删除数据而损失一些性能吗
如果我这样做:
val df3 = df2.groupBy("name").agg(<someaggregations>)
df2.unpersist
val df4 = df3.partition(col("id").cache
val df3 = df2.groupBy("name").agg(<someaggregations>)
val df4 = df3.partition(col("id").cache
df2.unpersist
val df3=df2.groupBy(“名称”).agg()
val df4=df3.partition(col(“id”).cache
df2.unpersist
我真的不想取消持久化df4吗
或者当我持久化df4时,它会自动覆盖df2
Spark不会覆盖df2,因为您可能有一个不同的计算DAG分支从df2开始,类似于
val df4 = df3.partition(col("id").cache
val df2_1 = df2.groupBy("another_name")
我不会因为从内存中删除数据而损失一些性能吗
一般来说是的。你需要知道的主要一点是Spark执行的是懒惰的执行。所以在舞台上
val df3 = f2.groupBy("name").agg(<someaggregations>)
val df3=f2.groupBy(“name”).agg()
实际上什么也没发生。看看官方的星火转化和行动指南
我真的不想取消持久化df4吗
没有