Pyspark: загрузить JSON в DataFrame - PullRequest
0 голосов
/ 15 апреля 2020

Я работаю в pyspark, чтобы провести некоторый анализ графиков, и мне нужно прочитать данные для вершин из файла JSON. Файл содержит один объект, который на самом деле является просто словарем:

{"id_1": [array of features], "id_2": [array of features], ... "id_n": [array of features]}

Я хочу создать фрейм данных spark только с двумя столбцами, ['id', 'features']. Каждая запись в словаре JSON должна быть строкой.

Я загружаю данные следующим образом:

vertices = spark.read.json("filepath/json_file.json")

Эти выходные данные неверны, схема представляет собой беспорядок (небольшой пример ниже):

StructType (Список (StructField (0, ArrayType (LongType, правда), правда), StructField (1, ArrayType (LongType, правда), правда), StructField (10, ArrayType (LongType, правда), правда), StructField (100, ArrayType (LongType, правда), правда), StructField (1000, ArrayType (LongType, правда), правда), StructField (1001, ArrayType (LongType, правда), правда), StructField (1002, ArrayType (LongType, правда), правда) , StructField (1003, ArrayType (LongType, true), true), StructField (1004, ArrayType (LongType, true), true) ...

Желаемый вывод выглядит следующим образом:

+-------+---------+
|  id   |features |
+-------+---------+
| id_1  | [array] | 
+-------+---------+
| id_2  | [array] | 
+-------+---------+
| id_3  | [array] | 
+-------+---------+

В качестве альтернативы, я мог бы также работать с ним в серии пар ключей, функций (в DF или в rdd - это нормально)

+-------+---------+
|  id   |features |
+-------+---------+
| id_1  |feature1 | 
+-------+---------+
| id_1  |feature2 | 
+-------+---------+
| id_1  |feature3 | 
+-------+---------+

Могу ли я что-либо сделать внутри dataframe или rdd.map/flatmap для получения желаемого результата?

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

Спасибо!

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