amazon s3 -不使用action从Apache Spark保存s3文件



在学习Spark时,似乎基本的工作流程是转换->操作,并获得操作作为最终结果。

我有一个不同的工作流,在这个工作流中,我对计算的最终结果不感兴趣,而是希望基于转换填充一大批Amazon S3文件。(想象一下大规模并行图像处理。)我想这样做:

for each k,v:
   v_ = transform(v)
   make a new s3 file, with key = k, and contents = v_

除了另一个答案之外,也许还值得考虑RDD.foreachPartition(),它可以一次处理一个整个分区。在推出数据需要大量设置成本的情况下,这是有益的。

transformedRDD.foreachPartition { iteratorOfRecords => 
    setup()    // do some initial connection setup, etc.
    iteratorOfRecords.foreach { keyValue => saveHoweverYouLike(keyValue) }
}

另一个需要注意的小问题。从技术上讲,foreach()也是一个"动作",即使它不返回结果。您必须执行一个操作来强制Spark启动rdd的惰性求值。

似乎最好的方法是简单地编写一个自定义保存方法并执行transform.foreach(x => saveHoweverYouLike(x))

最新更新