apache-spark - 由于洗牌而再次持久化后,Spark unpersisting dataframe
问题描述
假设我们有以下场景:
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"...
...
我的问题是我是否需要在某个时候取消 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
我真的不会坚持 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>)
实际上什么也没发生。查看官方 Spark 转换和操作指南。
我真的不会坚持 df4 吗?
不。
推荐阅读
- java - fluttet 是否适用于最新的 jdk 版本?
- r - 当公式由字符串给出时如何运行回归?
- r - 如果我有四组 100 个项目,R 中有没有办法随机选择其中的 10 个,以使某个变量的分布最均匀?
- java - Android Firebase上传图片不起作用
- intellij-idea - IntelliJ 运行 websphere 未显示最新更改
- c++ - 在 C++ 中使用 2D 数组作为游戏地图
- python - 将字典的值转换为向量
- frama-c - 如何在 Frama-C 中证明整数是有限的
- javascript - 未捕获的类型错误:无法在“元素”上执行“setAttribute”:需要 2 个参数,但只有 0 个存在
- c# - NLog 停止从 app.config 读取我的配置