我正在使用Azure Synapse pyspark来压平嵌套的json数据。json文件有带有嵌套数据的json对象,如下所示,这里cords的类型为struct,用于第1条和第3条记录,string用于第2条记录。当我使用df.printSchema((打印模式时,它将cords类型打印为字符串,如果我删除第二行json对象,那么它将打印struct类型的模式。在这里,我想根据cords数据类型过滤json对象,这样我就可以压平cords结构嵌套的数据。其中,对于第二个记录,不平坦必需。请帮我一个忙好吗?
{"日期时间":"2020-11-29T13:51:16.168659Z","绳索":{"x_al":0.0191342489,"y_al":-0.1100904993}}
{"dateTime":"2020-12-29T13:51:21.457739Z","cords":51.0}
{"日期时间":"2021-10-29T13:51:26.634289Z","绳索":{"x_al":0.01600042489,"y_al":-0.11009000993}}}
您可以将panda导入到您的代码中,并使用它加载数据,如下所示:
df = pd.DataFrame([flatten_json(data)])
根据上面的代码行,我们假设";数据";是存储JSON结构化数据的变量。
此外,我们有多个场景可以在关于每种json类型的数据中进行扁平化。
- 如果你只有一个dict,那么你可以使用
flatten_json(data)
- 如果您有多个像
[{},{}.{}]
这样的dict,则可以用作[flatten_json(x) for x in data]
- 如果有多个值,如
{1: {}, 2: {}, 3: {}}
,则应使用作为[flatten_json(data[key]) for key in data.keys()]
要更好地理解Pyspark,请参阅本博客,感谢towardsdastascience的清晰解释。