gpt4 book ai didi

apache-spark - 展平嵌套的 Spark 数据框

转载 作者:行者123 更新时间:2023-12-03 09:25:50 24 4
gpt4 key购买 nike

有没有办法展平任意嵌套的 Spark Dataframe?我看到的大部分工作都是为特定模式编写的,我希望能够将具有不同嵌套类型(例如 StructType、ArrayType、MapType 等)的 Dataframe 展平。

假设我有一个架构,如:

StructType(List(StructField(field1,...), StructField(field2,...), ArrayType(StructType(List(StructField(nested_field1,...), StructField(nested_field2,...)),nested_array,...)))

希望将其调整为具有以下结构的平面表:
field1
field2
nested_array.nested_field1
nested_array.nested_field2

仅供引用,寻找有关 Pyspark 的建议,但也欢迎其他口味的 Spark。

最佳答案

这个问题可能有点老了,但对于仍在寻找解决方案的任何人,您可以使用 select * 内联展平复杂的数据类型:

首先让我们创建嵌套的数据框:

from pyspark.sql import HiveContext
hc = HiveContext(sc)
nested_df = hc.read.json(sc.parallelize(["""
{
"field1": 1,
"field2": 2,
"nested_array":{
"nested_field1": 3,
"nested_field2": 4
}
}
"""]))

现在把它弄平:

flat_df = nested_df.select("field1", "field2", "nested_array.*")

您会在此处找到有用的示例:
https://docs.databricks.com/delta/data-transformation/complex-types.html

如果嵌套数组太多,可以使用:

flat_cols = [c[0] for c in nested_df.dtypes if c[1][:6] != 'struct']
nested_cols = [c[0] for c in nested_df.dtypes if c[1][:6] == 'struct']
flat_df = nested_df.select(*flat_cols, *[c + ".*" for c in nested_cols])

关于apache-spark - 展平嵌套的 Spark 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34271398/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com