使用 Azure Synapse pyspark 筛选器根据嵌套对象的数据类型平展嵌套的 json 对象



我正在使用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的清晰解释。

最新更新