У меня есть вложенный файл JSON, где каждая запись может содержать другой набор полей во вложенной части. Поле выглядит так, хотя на самом деле это версия avro:
{"type":"record",
"name":"features",
"namespace":"OurCode",
"fields":[{"name":"key","type":"long"},
{"name":"features",
"type":{"type":"map","values":"double"}}]
}
Второе поле, «функции», является вложенным полем, которое содержит несколько полей внутри себя, и каждая запись содержит потенциально другой набор вложенных полей.
Итак, если у меня есть 2 записи, которые выглядят так:
key1: 123 features:{var1=4, var2 = 3, var4 = 10}
key2: 456 features:{var3 = 15, var4 = 9, var5 = 22}
Мне нужно превратить приведенные выше данные во что-то вроде:
Key Var1 Var2 Var3 Var4 Var5
123 1 3 0 10 0
456 0 0 15 9 22
Я могу вручную извлечь поля при чтении файла, используя что-то вроде:
JsonLine(args("input"), ('acct_id, Symbol("features.Var1"). Symbol("features.Var2), ...)
.read
Мне нужен код, который является немного более общим и может выяснить, что представляют собой все подполя, без необходимости явно объявлять каждое из них.
Спасибо за вашу помощь.