我有一个嵌套的复杂 json 文件,其中结构类型、数组类型、列表、字典相互嵌套。
我有一个函数可以将结构类型的列展平,但是当它遇到任何其他类型时它会失败。
他们是否有任何递归函数可以正确处理所有这些类型并使用 pyspark 数据帧展平到叶级别?
我用来展平结构类型的代码是:
def flatten_df(nested_df):
stack = [((), nested_df)]
columns = []
while len(stack) > 0:
parents, df = stack.pop()
for column_name, column_type in df.dtypes:
if column_type[:6] == "struct":
projected_df = df.select(column_name + ".*")
stack.append((parents + (column_name,), projected_df))
else:
columns.append(col(".".join(parents + (column_name,))).alias("_".join(parents + (column_name,))))
return nested_df.select(columns)
我需要处理空结构、空数组、空列表、空字典,因为它也可能有空值。
如何使用 pyspark 实现这一目标?