有没有办法将任意嵌套的sparkDataframe展平?我看到的大部分工作都是为特定的模式编写的,我希望能够用不同的嵌套类型(例如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。
5条答案
按热度按时间krcsximq1#
我的最后一个方法是:
1) 将dataframe中的行Map到dict的rdd。在线查找合适的python代码来展平dict。
哪里
2) 将rdd[dict]转换回Dataframe
fcg9iug32#
我开发了一种递归的方法来展平任何嵌套的Dataframe。
该实现是在基于github的aws数据牧马人代码上实现的。
p、 spark支持在包中已被弃用,但代码库仍然有用。
xmd2e60i3#
这将展平同时具有结构类型和数组类型的嵌套df。通常在通过json读取数据时会有所帮助。改进了这个https://stackoverflow.com/a/56533459/7131019
**
zzwlnbp84#
这个问题可能有点老了,但是对于仍在寻找解决方案的人来说,您可以使用select*内联展平复杂的数据类型:
首先,让我们创建嵌套的Dataframe:
现在把它展平:
您可以在这里找到有用的示例:https://docs.databricks.com/delta/data-transformation/complex-types.html
如果嵌套数组太多,可以使用:
lrpiutwd5#
下面的要点将使嵌套json的结构扁平化,
然后可以将嵌套数据展平为
flatten_data = flatten_frame(nested_df)
这将为您提供平坦的Dataframe。要点取自https://gist.github.com/dgrady/b7e7ff3a80d7ee16b168eb84603f5599