Файл паркета, написанный с помощью AvroParquetWriter, не доступен для Spark - PullRequest
0 голосов
/ 08 января 2020

Я пишу паркетный файл на локальном компьютере и загружаю его в s3 с помощью клиента AvroParquetWriter и AmazonS3. Затем пытаюсь получить к нему доступ из Spark. Ниже приведен мой код:

AvroParquetWriter:

try (ParquetWriter< MyData > writer = AvroParquetWriter.<MyData>builder("/tmp/file.parquet")
                .withSchema(ReflectData.AllowNull.get().getSchema(MyData.class))
                .withDataModel(ReflectData.get())
                .withConf(new Configuration())
                .withWriteMode(OVERWRITE)
                .build()) {
                writer.write(myData);
        }

Загрузка на s3:

 s3client.putObject(bucketName, "path/file.parquet", new File("/tmp/file.parquet"));

Чтение из Spark:

df = spark.read.parquet("s3://bucketname/path/file.parquet")

При чтении файла паркета из Spark я получаю следующее исключение:

Произошла ошибка при вызове o379.parquet. : org. apache .spark.SparkException: задание прервано из-за сбоя этапа: задание 0 на этапе 3.0 не выполнено 4 раза, последний сбой: потерянное задание 0.3 на этапе 3.0 (TID 15, ip-10-110-10-115 .ec2.internal, исполнитель 7): org. apache .spark.SparkException: исключение, генерируемое в awaitResult: at org. apache .spark.util.ThreadUtils $ .awaitResult (ThreadUtils. scala: 226) в org . apache .spark.util.ThreadUtils $ .parmap (ThreadUtils. scala: 290) в org. apache .spark. sql .execution.datasources.parquet.ParquetFileFormat $ .readParquetFootersInParallel (ParquetFileFormat. 1043 *: 538) в орг. apache .spark. sql .execution.datasources.parquet.ParquetFileFormat $$ anonfun $ 9.apply (ParquetFileFormat. scala: 611) в орг. apache .spark. sql .execution.datasources.parquet.ParquetFileFormat $$ anonfun $ 9.apply (ParquetFileFormat. scala: 603) в org. apache .spark.rdd.RDD $$ anonfun $ mapPartitions $ 1 $$ononfun $ применить $ 23.применить (СДР. scala: 801) в орг. apache .spark.rdd.RDD $$ anonfun $ mapPartitions $ 1 $$ anonfun $ apply $ 23.apply (СДР. scala: 801) в org. apache .spark. rdd.MapPartitionsRDD.compute (MapPartitionsRDD. scala: 52) в орг. apache .spark.rdd.RDD.computeOrReadCheckpoint (RDD. scala: 324) в орг. apache .spark.rdd.RDD. итератор (RDD. scala: 288) в орг. apache .spark.scheduler.ResultTask.runTask (ResultTask. scala: 90) в орг. apache .spark.scheduler.Task.run (Задача. scala: 121) в орг. apache .spark.executor.Executor $ TaskRunner $$ anonfun $ 10.apply (Executor. scala: 408) в орг. apache .spark.util.Utils $ .tryWithSafeFinally (Utils. scala: 1360) в орг. apache .spark.executor.Executor $ TaskRunner.run (Executor. scala: 414) в java .util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor. java: 1149) в java .util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor. java: 624) в java .lang.Thread.run (поток. java: 748) Причина: java .io.IOException: Не удалось прочитать нижний колонтитул для файла: FileStatus {path = s3: //bucketname/path/file.parquet; isDirectory = ложь; длина = 3920; Репликация = 0; размер_блок = 0; MODIFICATION_TIME = 0; access_time = 0; владелец =; группа =; разрешение = RW-RW-rw-; isSymlink = false} в org. apache .spark. sql .execution.datasources.parquet.ParquetFileFormat $$ anonfun $ readParquetFootersInParallel $ 1.apply (ParquetFileFormat. scala: 551) в орг. apache .spark. sql .execution.datasources.parquet.ParquetFileFormat $$ anonfun $ readParquetFootersInParallel $ 1.apply (ParquetFileFormat. scala: 538) в орг. apache .spark.util.ThreadUtils $$ anonfun $ 3 $ apply $ 1.apply (ThreadUtils. scala: 287) в scala .concurrent.impl.Future $ PromiseCompletingRunnable.liftedTree1 $ 1 (Future. scala: 24) в scala .concurrent.impl.Future $ PromiseCompletingRunnable .run (Future. scala: 24) в scala .concurrent.impl.ExecutionContextImpl $ AdaptedForkJoinTask.exe c (ExecutionContextImpl. scala: 121) в scala .concurrent.forkjoin.ForkJoinTaskEx 1093 * (ForkJoinTask. java: 260) в scala .concurrent.forkjoin.ForkJoinPool $ WorkQueue.runTask (ForkJoinPool. java: 1339) в scala .concurrent.forkjoin.ForkJoinPol 1098 *: 1979) по адресу scala .concurrent.forkjoin.ForkJoinWorkerThread.r un (ForkJoinWorkerThread. java: 107) Вызывается: java .lang.RuntimeException: s3: //bucketname/path/file.parquet не является файлом Parquet. ожидаемое число волхвов c в хвосте [80, 65, 82, 49], но найдено [120, 57, -43, 112] в орг. apache .parquet.had oop .ParquetFileReader.readFooter ( ParquetFileReader. java: 524) в org. apache .parquet.had oop .ParquetFileReader.readFooter (ParquetFileReader. java: 505) в org. apache .parquet.had oop .ParquetFileReader.readFooter (ParquetFileReader. java: 499 ) в орг. apache .parquet.had oop .ParquetFileReader.readFooter (ParquetFileReader. java: 476) в орг. apache .spark. sql .execution.datasources.parquet.ParquetFileFormat $$ anonfun $ readParquetFootersInParallel $ 1.apply (ParquetFileFormat. scala: 544) ... еще 9

Пожалуйста, помогите мне решить эту проблему.

Спасибо

...