我目前正在探索Spark。我面臨以下任務 - 獲取RDD,根據特定條件對其進行分區,然後將多個文件寫入S3存儲桶中的不同文件夾中。Spark RDD foreach Partition to S3
一切都很好,直到我們來上傳到S3部分。我已閱讀所有關於這個問題的問題,並發現我可以使用AmazonS3Client
或saveToTextFile
方法進行RDD。有兩個問題,我面對:
如果我與
AmazonS3Client
去我得到一個java.io.NotSerializableException
因爲代碼是從星火驅動程序發送給它需要序列化和顯然的AmazonS3Client不支持工人那。如果我去
saveToTextFile
我也遇到類似的問題。當我進入foreachPartition
循環時,我需要獲得Iterable[T]
(在這種情況下爲p
),所以如果我想使用saveToTextFile
,則需要創建Iterable的RDD,因此需要創建parallelize
。問題是SparkContextsc
也(沒錯)不會序列化。
rdd.foreachPartition { p => sc.parallelize(p.toSeq).saveAsTextFile(s"s3n://") }
任何幫助將不勝感激。