Я пытаюсь прочитать файл JSON и выполнить синтаксический анализ 'jsonString' и базовых полей, включающих массив в фрейм данных pyspark.
Вот содержимое файла json.
[{"jsonString": "{\"uid\":\"value1\",\"adUsername\":\"value3\",\"courseCertifications\":[{\"uid\":\"value2\",\"courseType\":\"TRAINING\"},{\"uid\":\"TEST\",\"courseType\":\"TRAINING\"}],\"modifiedBy\":\"value4\"}","transactionId": "value5", "tableName": "X"},
{"jsonString": "{\"uid\":\"value11\",\"adUsername\":\"value13\",\"modifiedBy\":\"value14\"}","transactionId": "value15", "tableName": "X1"},
{"jsonString": "{\"uid\":\"value21\",\"adUsername\":\"value23\",\"modifiedBy\":\"value24\"}","transactionId": "value25", "tableName": "X2"}]
Я могу проанализировать содержимое строки 'jsonString' и выбрать необходимые столбцы, используя приведенную ниже логику
df = spark.read.json('path.json',multiLine=True)
df = df.withColumn('courseCertifications', explode(array(get_json_object(df['jsonString'],'$.courseCertifications'))))
Теперь моя конечная цель - проанализировать поле "courseType" из "courseCertifications" и создать одну строку для каждого экземпляра.
Я использую логику ниже, чтобы получить "courseType"
df = df.withColumn('new',get_json_object(df.courseCertifications, '$[*].courseType'))
Я могу получить содержимое "courseType", но в виде строки, как показано ниже
[Row(new=u'["TRAINING","TRAINING"]')]
Моя конечная цель - создать фрейм данных со столбцами.
- Мне нужно сохранить все строки и создать несколько строк, по одной на каждый экземпляр массива courseCertifications.uid / courseCertifications.courseType.