Как сопоставить каждый элемент фрейма данных spark с соответствующим именем столбца и применить к нему несколько преобразований, используя scala? - PullRequest
0 голосов
/ 17 мая 2018

У меня есть такие данные ORC (загруженные как изображение)

Данные ORC при загрузке в фрейм данных

Для содержимого в строках не определено никакой схемы, поэтому я хочу разбить ее на RDD's и перейти к другой Dataframe, которая имеет некоторую определенную схему (используя "structType"), чтобы я мог прочитайте JSON.

Поэтому, когда я попытался разбить эти вещи на RDD, просто выбрав столбцы - я получаю, как показано ниже

[{"a" : 1, "b" : 2, "c" : { "c1": 3, "c2" :4}},{"d" : 5, "e" : 6, "f" : { "f1": 7, "f2" :8}},{"g" : 9, "h" : 10, "i" : { "i1": 11, "i2" :12}}]
[{"a" : 13, "b" : 14, "c" : { "c1": 15, "c2" :16}},{"d" : 17, "e" : 18, "f" : { "f1": 19, "f2" :20}}​,{"g" : 21, "h" : 22, "i" : { "i1": 23, "i2" :24}}​]

Я хочу преобразовать этот RDD, как показано ниже, чтобы вставить в мой Dataframe, для которого определена схема

{"Column 1":{"a" : 1, "b" : 2, "c" : { "c1": 3, "c2" :4}},"Column 2":{"d" : 5, "e" : 6, "f" : { "f1": 7, "f2" :8}},"column 3" :{"g": 9, "h" : 10, "i" : { "i1": 11, "i2" :12}}}
{"Column 1":{"a" : 13, "b" : 14, "c" : { "c1": 15, "c2" :16}},"Column 2":{"d" : 17, "e" : 18, "f" : { "f1": 19, "f2" :20}}​,"column 3":{"g" : 21, "h" : 22, "i" : { "i1": 23, "i2" :24}}​}

Все, что мне нужно, это сопоставить каждый элемент в строке с соответствующим именем столбца и добавить " " к этим именам столбцов и обернуть всю строку в {}

Я не могу split на "},", поскольку JSON может иметь вложенную структуру до 2 уровней и может находиться где угодно в JSON.

Как этого добиться?

1 Ответ

0 голосов
/ 28 мая 2018

Вот способ, которым вы можете преобразовать ваш фрейм данных в json:

df.toJSON
  .map(_.replace("\\", "")
        .replace("}\"", "}")
        .replace("\"{", "{"))

Я использую регулярное выражение для удаления нежелательных персонажей. Обратите внимание, что это может быть не очень эффективно, если у вас много записей.

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