问题描述
我很想知道何时需要将数据帧保存在spark中,何时不需要。案例:-
- 如果我需要文件中的数据(我是否需要保留它?如果我应用重复计数,例如:-
val df=spark.read.json("file://root/Download/file.json")
df.count
df.count
我需要保持df吗?因为根据我的说法,它应该在第一次计数后将df存储在内存中,并在第二次计数中使用相同的df。在文件中记录为4,因为当我实际检查它时,它会一次又一次地读取文件,那么为什么spark不将其存储在内存中
- 第二个问题是火花,是行动还是转变?
解决方法
根据设计,DataFrame是不可变的,因此对它们进行的每次转换都会一起创建一个新的数据框架。火花管道通常涉及多个转换,从而导致创建多个数据帧。如果spark存储所有这些数据帧,则内存需求将很大。因此,spark将保留数据帧的责任留给了用户。无论您打算重复使用哪个数据框架,都可以保留它们,以后再取消持久化。
我认为我们不能将“火花读取”定义为动作或转换。动作/转换应用于数据帧。为了识别差异,您应该记住,转换操作将返回一个新的数据帧,而动作将返回一些值/秒。