如果您加载一些数据,计算一个DataFrame,将其写入磁盘,然后再使用该DataFrame ...假设它仍未缓存在RAM中(假设没有足够的空间),Spark是否足够聪明从磁盘加载数据而不是从原始数据重新计算DataFrame?
例如:
df1 = spark.read.parquet('data/df1.parquet')
df2 = spark.read.parquet('data/df2.parquet')
joined = df1.join(df2, df1.id == df2.id)
joined.write.parquet('data/joined.parquet')
computed = joined.select('id').withColummn('double_total', 2 * joined.total)
computed.write.parquet('data/computed.parquet')
在适当的情况下,当我们存储computed
时,它将从joined
加载data/joined.parquet
DataFrame,还是总是通过加载/加入df1
/重新计算df2
是否当前不缓存joined
?
答案 0 :(得分:1)
let gesture = UITapGestureRecognizer(target: self, action: #selector(viewTapped(_:)))
gesture.delegate = self //here......
self.puttingView.addGestureRecognizer(gesture)
数据帧指向joined
。据我所知,镶木地板编写者不会对该引用进行任何更改,因此,为了加载镶木地板数据,您需要使用df1.join(df2, df1.id == df2.id)
构造一个新的Spark阅读器。
您可以通过DataFrameWriter代码(检查镶木地板/保存方法)验证以上声明,该代码返回Unit,并且不以任何方式修改源数据帧的引用。最后,在上述示例中回答您的问题,将为spark.reader.parquet(...)
计算一次联合数据帧,为joined.write.parquet('data/joined.parquet')
计算一次