我正在Amazon竞价型实例上运行spark应用程序。最后,我将结果导出到S3上的镶木地板文件中。这些任务占用大量内存,因此我必须使用大量分区(数十万个)来运行初始计算。最后,我想将这些分区合并为几个大分区,然后将它们保存到大型木地板文件中。这就是我遇到麻烦的地方:
-如果我使用的是.coalesce()
,这是一个狭窄的转换,那么合并之前的整个谱系将在少量分区上执行,这将导致OOM。
-如果我使用的是.repartition()
,那么我将依靠HDFS来随机播放文件。
使用竞价型实例时可能会出现问题,该实例可能已停用,从而导致HDFS块损坏/丢失。
-检查点也依赖于HDFS,所以我不能使用它。
-转换为Dataframe
并返回实际上并没有破坏血统(rdd.toDF.rdd
,我错过了什么吗?)。
总而言之,我正在寻找一种方法来合并较小数量的分区,以便仅将数据持久存储在S3上-我希望使用原始分区进行计算。