Spark: чтение метаданных AVRO из DataFrame - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть файлы AVRO, сохраненные в HDFS, загруженные с помощью Kafka Connect HDFS Sink.

Это часть записи реестра схемы:

{
        "name": "TAX_RATE",
        "type": ["null", {
            "type": "bytes",
            "scale": 127,
            "precision": 64,
            "connect.version": 1,
            "connect.parameters": {
                "scale": "127"
            },
            "connect.name": "org.apache.kafka.connect.data.Decimal",
            "logicalType": "decimal"
        }],
        "default": null
    }, .....,

 }

Когда я создаю DataFrame, читая эти файлы , Столбец «TAX_RATE» читается как двоичный столбец.

Теперь я хочу преобразовать двоичные поля в тип, определенный в поле метаданных «логического типа».

Для этого Я хочу использовать метаданные AVRO.

Но когда я пытаюсь прочитать метаданные из схемы DataFrame, он становится пустым.

val incr_df = spark
.read
.format("avro")
.load("/tmp/ash/binaryToDecimal/partition=2020-04-22-01")
incr_df.printSchema
incr_df.schema.fields.map(f=> f.metadata)

Вывод:

res7 : Array [org. apache .spark. sql .types.Metadata] = Array ({}, {}, {}, {}, {}, {}, {}, {}, {}, { }, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {} , {}, {}, {})

Есть ли способ или настройка, чтобы я мог читать метаданные AVRO из схемы DataFrame?

...