我正在amazon spot示例上运行spark应用程序。最后,我将结果导出到s3上的Parquet文件。这些任务是内存密集型的,因此我必须使用大量分区(几十万)来运行初始计算。最后,我想把这些分区合并成几个大分区,并将它们保存到大的Parquet文件中。这就是我遇到麻烦的地方:
-如果我用的是 .coalesce()
,这是一个狭窄的转换,合并之前的整个沿袭将在少量分区上执行,这将导致OOM。
-如果我用的是 .repartition()
,我依赖hdfs来处理shuffle文件。这是使用spot示例时的一个问题,spot示例可能会停用,从而留下损坏/丢失的hdfs块。
-检查点也依赖于hdfs,所以我不能使用它。
-转换为 Dataframe
而back并没有真正打破血统( rdd.toDF.rdd
,我错过了什么吗?)。
总而言之,我正在寻找一种方法来合并到一个更小的分区中,只是为了将数据持久化到s3上—我希望使用原始分区进行计算。
暂无答案!
目前还没有任何答案,快来回答吧!