Я в настоящее время изучаю Spark. Я столкнулся со следующей задачей: получить RDD, разбить его на основе определенных критериев и затем записать несколько файлов в разные папки в ведро S3.Spark RDD foreachPartition to S3
Все в порядке, пока мы не придем к загрузке на часть S3. Я прочитал все вопросы, относящиеся к этой проблеме на SO, и обнаружил, что могу использовать AmazonS3Client
или метод saveToTextFile
для RDD. Есть две проблемы, я лицо:
Если я иду с
AmazonS3Client
я получаюjava.io.NotSerializableException
, так как код передается от водителя Спарк работнику он должен быть сериализованная и, видимо, AmazonS3Client не поддерживает что.Если я иду с
saveToTextFile
, я сталкиваюсь с аналогичной проблемой. Когда я иду в циклforeachPartition
, мне нужно получитьIterable[T]
(в данном случаеp
), поэтому, если я хочу использоватьsaveToTextFile
, мне нужно создать RDD Iterable, следовательно,parallelize
. Проблема в том, что SparkContextsc
также (по праву) не сериализуется.
rdd.foreachPartition { p => sc.parallelize(p.toSeq).saveAsTextFile(s"s3n://") }
Любая помощь будет принята с благодарностью.