Какой FileOutputCommitter следует использовать при записи файлов AVRO в Spark?

При сохранении RDD в S3 в AVRO я получаю следующее предупреждение в консоли:

Using standard FileOutputCommitter to commit work. This is slow and potentially unsafe.

Мне не удалось найти простой неявный, такой как saveAsAvroFile, поэтому я покопался и пришел к следующему:

import org.apache.avro.Schema
import org.apache.avro.mapred.AvroKey
import org.apache.avro.mapreduce.{AvroJob, AvroKeyOutputFormat}
import org.apache.hadoop.io.NullWritable
import org.apache.hadoop.mapreduce.Job
import org.apache.spark.rdd.RDD

object AvroUtil {

  def write[T](
      path: String,
      schema: Schema,
      avroRdd: RDD[T],
      job: Job = Job.getInstance()): Unit = {
    val intermediateRdd = avroRdd.mapPartitions(
      f = (iter: Iterator[T]) => iter.map(new AvroKey(_) -> NullWritable.get()),
      preservesPartitioning = true
    )

    job.getConfiguration.set("avro.output.codec", "snappy")
    job.getConfiguration.set("mapreduce.output.fileoutputformat.compress", "true")

    AvroJob.setOutputKeySchema(job, schema)

    intermediateRdd.saveAsNewAPIHadoopFile(
      path,
      classOf[AvroKey[T]],
      classOf[NullWritable],
      classOf[AvroKeyOutputFormat[T]],
      job.getConfiguration
    )
  }
}

Я немного сбит с толку, поскольку не вижу, что не так, потому что файлы AVRO, кажется, выводятся правильно.

Почему бы не написать Dataframe с библиотекой spark-avro?

OneCricketeer 07.04.2021 04:25

@OneCricketeer, это вы имеете в виду? github.com/databricks/spark-avro Похоже, он помечен как устаревший. Наша кодовая база зависит от низкоуровневых RDD. Есть ли шанс опубликовать пример, пожалуйста? Спасибо.

Mridang Agarwalla 07.04.2021 19:47

Да. Эта библиотека была объединена с восходящим потоком spark.apache.org/docs/latest/sql-data-sources-avro.html, и вам нужно будет преобразовать ваш RDD с помощью функции toDF stackoverflow.com/questions/38968351/spark-2-0-scala-rdd-tod‌ е

OneCricketeer 08.04.2021 05:01
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
28
0

Другие вопросы по теме