Как я могу преобразовать столбец искровых данных, содержащий сериализованный JSON, в сам кадр данных? - PullRequest
0 голосов
/ 10 января 2019

Причина, по которой я чувствовал, что это не дубликат этого вопроса :

  • from_json требует знания схемы json ex-ante, о которой я не знаю
  • get_json_object - я пытался использовать это, но результат выполнения get_json_object сам по себе является строкой, оставляя меня на первом месте. Кроме того, (из оператора exprs) выясняется, что, опять-таки, автор ожидает знания схемы ex-ante и не выводит схему.

Требования:

  • ex-ante, у меня нет знаний о том, что такое схема json, и, следовательно, мне нужно сделать вывод. spark.read.json, кажется, лучший вариант для вывода схемы, но все примеры, с которыми я сталкивался, загружали json из файлов. В моем случае json содержался в столбце в фрейме данных.

  • Я не привязан к типу исходного файла (в данном случае тестируется с использованием parquet и csv). Однако исходная схема данных имеет и будет хорошо структурирована. В моем случае json содержится в столбце исходного кадра данных, который называется 'fields'.

  • Полученный фрейм данных должен ссылаться на первичный ключ в исходном фрейме данных (в моем примере это «id»).

1 Ответ

0 голосов
/ 10 января 2019

Ключ оказался в исходном коде искры . path при передаче в spark.read.json может быть «СДР строк, хранящих объекты json».

Вот источник схема данных :

Код, который я придумал, был:

def inject_id(row):
    js = json.loads(row['fields'])
    js['id'] = row['id']
    return json.dumps(js)
json_df = spark.read.json(df.rdd.map(inject_id))

json_df затем имелась схема как таковая

Обратите внимание, что - я не тестировал это с более вложенной структурой, но я верю, что она будет поддерживать все, что поддерживает spark.read.json.

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