сериализовать RDD с Avro - PullRequest
       28

сериализовать RDD с Avro

0 голосов
/ 08 марта 2019

У меня есть этот сценарий.Мы должны предоставить функциональность, которая принимает любой тип RDD, с обобщенной нотацией, которую можно сказать RDD[T], а также сериализацию и сохранение в HDFS с использованием Avro DataFile.

Остерегайтесь того, что СДР может иметьчто угодно, поэтому функциональность должна быть общей для данного типа СДР, например, RDD[(String, AnyBusinessObject)] o RDD[(String, Date, OtherBusinessObject)].

Вопрос: как мы можем вывести схему Avro и предоставить Сериализация Avro для какого-либо типа класса, чтобы сохранить его как файл данных Avro?

Функциональность на самом деле уже создана, но она использует Сериализация Java , это, очевидно, приводит к штрафу в виде пространства и времени, поэтому мы хотели бы реорганизовать его.Мы не можем использовать DataFrames.

1 Ответ

0 голосов
/ 09 марта 2019

Вы можете записывать файлы avro, используя GenericRecord API (см. Раздел «Сериализация и десериализация без генерации кода»). Однако вам все равно нужна схема Avro.

Если у вас есть DataFrame, Spark обрабатывает все это за вас, потому что Spark знает, как выполнить преобразование типов Spark SQL в типы Avro.

Поскольку вы говорите, что не можете использовать DataFrames, вам придется выполнить генерацию этой схемы самостоятельно. Одним из вариантов является использование Avro ReflectData API .

Затем, получив схему, вы выполните map, чтобы преобразовать все элементы в СДР в GenericRecord s и использовать GenericDatumWriter, чтобы записать ее в файл.

Я бы серьезно пересмотрел эти требования. IMO, лучше было бы преобразовать RDD в DataFrame, чтобы Spark мог выполнять тяжелую работу по написанию Avro. Или ... зачем вообще с Авро возиться? Просто используйте формат файла, который позволяет вам иметь общую схему, такую ​​как JSON.

...