你好,
我有一個深層嵌套的火花dataframe下麵的結構類似
| - - - id:整數(nullable = true)
|——低:結構(可空= true)
| |——field_a:整數(nullable = true)
| |——上:結構(containsNull = true)
| | |——field_A:整數(nullable = true)
| | | - num:結構(containsNull = true)
| | | |——field_1:整數(nullable = true)
| | | |——field_2:字符串(nullable = true)
我希望平這,我有一個消息結構體
| - - - id:整數(nullable = true)
|——低:結構(可空= true)
| - - -低。field_a:整數(nullable = true)
| - - -低。:上部結構(containsNull = true)
|——lower.upper。field_A:整數(nullable = true)
|——lower.upper。num:結構(containsNull = true)
|——lower.upper.num。field_1:整數(nullable = true)
|——lower.upper.num。field_2:字符串(nullable = true)
這種變化的原因是我可以把這變成一個漂亮的表,每一列是一個嵌套的結構體元素。列名不該對我多重要。
我知道我可以使用df。選擇(“*”、“低。*”、“lower.upper。*”、“lower.upper.num。*”)來獲得我想要的不過繼承者訣竅....
這個結構會隨著時間改變,我尋找一個優雅的方式做扁平結構沒有引用特定列。
什麼好主意嗎?或建議嗎?
謝謝
Aidonis
你需要使用類似:
從pyspark.sql。類型進口StructType def平(=沒有模式,前綴):字段=[]領域的模式。字段:名稱=前綴+”。' + field.name如果其他前綴field.name dtype =。數據類型如果isinstance (dtype StructType):字段+ =平(dtype前綴=名稱):fields.append(名字)返回字段df.select(平(df.schema))
你需要使用類似:
從pyspark.sql。類型進口StructType def平(=沒有模式,前綴):字段=[]領域的模式。字段:名稱=前綴+”。' + field.name如果其他前綴field.name dtype =。數據類型如果isinstance (dtype StructType):字段+ =平(dtype前綴=名稱):fields.append(名字)返回字段df.select(平(df.schema))
@Aidan霍夫曼
在這裏你可以找到一塊平整json代碼基於數據類型(數組或結構)