【发布时间】:2019-10-17 14:22:15
【问题描述】:
我正在尝试读取 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'))))
现在我的最终目标是从“courseCertifications”解析字段“courseType”并为每个实例创建一行。
我正在使用以下逻辑来获取“courseType”
df = df.withColumn('new',get_json_object(df.courseCertifications, '$[*].courseType'))
我能够获取“courseType”的内容,但作为字符串,如下所示
[Row(new=u'["TRAINING","TRAINING"]')]
我的最终目标是创建一个包含 transactionId、jsonString.uid、jsonString.adUsername、jsonString.courseCertifications.uid、jsonString.courseCertifications.courseType 列的数据框
- 我需要保留所有行并为每个 courseCertifications.uid/courseCertifications.courseType 的数组实例创建多行。
【问题讨论】:
标签: arrays json apache-spark pyspark apache-spark-sql