Мне нужно превратить приведенный ниже CSV-файл в таблицу MapR DB JSON с вложенной структурой, используя pySpark. На практике мне нужно будет использовать несколько файлов для создания таблицы. Файлы очень похожи, но могут варьироваться в зависимости от количества «проблемных» столбцов, которые они содержат. Я хотел бы, чтобы эти столбцы представляли собой массив переменной длины, различный для каждого вложенного документа.
CSV Пример:
_id, student_name, test_name, test_version, test_score, test_date, problem1, problem2, problem3
10001, Jane, geo_101_1, 2, .86, 10-31-2019, 2, 4, 5
10009, Tarzan, geo_101_1, 2, .66, 10-31-2019, 7, 9, 11
JSON DOCS:
'[
{“student_id”: “10001",
“student_name”:”Jone”,
“Scores”:
[{“test_name”: “geo_101_1”,
“test_version”: “2”,
“test_score”: “.86”,
“test_date”: “10-31-2019”,
“Incorrect_problems”: [“2”, “4”, “5”]},
{“test_name”: “calc_200_2”,
“test_version”: “1”,
“test_score”: “.70”,
“test_date”: “10-31-2019”,
“Incorrect_problems”: [“3”, “9”]},
},
{“student_id”: “10009”,
“student_name”:”Tarzan”,
“Scores”:
[{“test_name”: “geo_101_1”,
“test_version”: “2”,
“test_score”: “.66”,
“test_date”: “10-31-2019”,
“Incorrect_problems”: [“1”, “3”, “4”]},
{“test_name”: “calc_200_2”,
“test_version”: “2”,
“test_score”: “.75”,
“test_date”: “10-31-2019”,
“Incorrect_problems”: [“2”, “3”]},
]
Я переместил CSV в фрейм данных и смог получить фрейм данных в нужную мне схему.
df_nested_new.printSchema()
root
|-- student_id: string (nullable = true)
|-- scores: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- test_name: string (nullable = true)
| | |-- test_version: string (nullable = true)
| | |-- test_score: string (nullable = true)
| | |-- test_date: string (nullable = true)
| | |-- incorrect_problems: array (nullable = false)
| | | |-- element: string (containsNull = true)
Но когда я запускаю spark.saveToMapRDB, я получаю ниже неописанная ошибка. Похоже, я не могу создать любую таблицу MaprDB из кадра данных, который содержит массив. Это известное ограничение какого-то рода? Есть идеи?
spark.saveToMapRDB(df_nested_new, "nested_test_scores", create_table=True, id_field_path = "student_id")
Py4JJavaError: Произошла ошибка при вызове o65.saveToMapRDB. : org. apache .spark.SparkException: задание прервано из-за сбоя этапа: задание 4 на этапе 18.0 не выполнено 4 раза, последний сбой: потерянное задание 4.3 на этапе 18.0 (TID 266, имя_экземпляра, исполнитель 8): java .lang.NullPointerException
Я также попытался загрузить rdd в таблицу. Но, похоже, rrd -> maprdb не поддерживается в python.