每个标题:Spark可以将单个RDD / Dataset / DataFrame分区的一部分存储在内存中,而部分存储在磁盘上吗?换句话说,假设持久性级别支持该功能,那么如果分区太大而无法存储在内存中,能否将其部分保存在内存中并且部分保存在磁盘上?
我的用例是我想写出非常大的Parquet文件,而Spark的写行为是为每个分区写出一个文件。
答案 0 :(得分:2)
恐怕这不可能。内存和磁盘选项将分区用作最小的数据分区。 根据{{3}},如果使用了MEMORY_AND_DISK存储级别,则将不适合内存的分区保存在磁盘上。
MEMORY_AND_DISK将RDD作为反序列化的Java对象存储在JVM中。如果 RDD不适合内存,存储不适合的分区 磁盘,并在需要时从那里读取它们。
MEMORY_AND_DISK_SER具有类似的行为,但将RDD存储为序列化的Java对象(每个分区一个字节数组)
也许您可以用某种方法来减小分区的大小。我认为这可能会有所帮助。