私は現在Sparkを調べています。私は次のタスクに直面しています - RDDを取得し、特定の基準に基づいてパーティションを分割し、S3バケット内の異なるフォルダに複数のファイルを書き込む。スパークRDD foreachPartition to S3
S3にアップロードするまでは問題ありません。私はSOのこの問題に関連するすべての質問を読んで、AmazonS3Client
またはsaveToTextFile
のRDDのどちらかの方法を使用できることがわかりました。私が直面する2つの問題があります。
私は
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://") }
すべてのヘルプは大歓迎されます。