Применение схемы Avro (.avsc) в Pyspark

Может ли кто-нибудь помочь мне прочитать схему avro (.avsc) через Pyspark и применить ее при записи кадра данных в целевое хранилище? Все мои схемы таблиц targetr предоставляются в виде файлов .avsc, и мне нужно предоставить эту пользовательскую схему при сохранении моего фрейма данных в Pyspark. Я знаю, что есть такие библиотеки, как spark-avro из databricks. Но все примеры даны на Scala.


person ASHISH M.G    schedule 23.03.2021    source источник


Ответы (1)


С этим файлом /tmp/test.avsc

{
     "type": "record",
     "namespace": "com.example",
     "name": "FullName",
     "fields": [
       { "name": "first", "type": "string" },
       { "name": "last", "type": "string" }
     ]
}

и такой кадр данных:

df = spark.createDataFrame([{"first": "john", "last": "parker" }], StructType([StructField("first", StringType()), StructField("last", StringType())]))

в результате этого:

+-----+------+
|first|  last|
+-----+------+
| john|parker|
+-----+------+

вы можете сделать это, чтобы применить схему записи:

jsonFormatSchema = open("/tmp/test.avsc", "r").read() 
df.write.format("avro").options(avroSchema=jsonFormatSchema).save("/tmp/avro")

и аналогично применять схему чтения:

spark.read.format('avro').options(avroSchema=jsonFormatSchema).load("/tmp/avro")

Более подробная информация доступна здесь, где, кстати, примеров Python более чем достаточно: https://spark.apache.org/docs/latest/sql-data-sources-avro.html

person Matt    schedule 25.03.2021
comment
Я хочу писать как паркет, а не как авро. Этот пример для написания как avro - person ASHISH M.G; 26.03.2021
comment
хорошо, ваш вопрос заключался в том, как применить схему, и я дал вам ответ на этот вопрос, так что я думаю, вы можете просто игнорировать часть письма. - person Matt; 26.03.2021