Обработка большой XML строки в поле avro - MapReduce - PullRequest
2 голосов
/ 28 мая 2020

У нас есть файл hdfs с несколькими записями avro. У нас есть поле в записи avro, которое может содержать большие XML строк (до 10 ГБ).

Ввод, например,

{
  id: 1,
  content: "<data><item>...</item><item>...</item>...</data>"
},
{
  id: 2,
  content: "<data><item>...</item><item>...</item>...</data>"
}

Насколько я понимаю, с помощью MapReduce мы можем создать собственное разделение ввода для разделения данных. Если бы файл был просто xml, мы, вероятно, могли бы использовать что-то вроде XmlInputFormat для разделения по определенному тегу xml. В данном случае это внутри поля avro. Кажется, что один сопоставитель займет целую строку размером 10 ГБ, что было бы очень медленно.

Есть ли способ эффективно разделить эти данные на тег элемента xml? Желаемый результат - иметь запись avro для каждого элемента.

Выход, например,

{
  data_id: 1,
  item_data: "<item>...</item>"
},
{
  data_id: 1,
  item_data: "<item>...</item>"
},
{
  data_id: 2,
  item_data: "<item>...</item>"
},
{
  data_id: 2,
  item_data: "<item>...</item>"
},
...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...