我尝试在spark中分解复杂数据帧的结构。我只对root下的嵌套数组感兴趣。问题是我无法从StructField的类型中检索ElementType。
这是一个示例,这是StructType对象的模式:
df.printSchema
result>>
root
|-- ID: string (nullable = true)
|-- creationDate: string (nullable = true)
|-- personsList: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- firstName: string (nullable = true)
| | |-- lastName: string (nullable = true)
每个StructType都是
的数组FieldType ( name, type, nullable , metadata).
我尝试了以下代码:
val personsList = df.schema("personsList") // personsList is a StructField
println(passengersList.dataType)
我想检索ElementType以获得嵌套数组的StructType,但不幸的是我们只有typeName或json方法。
致以最诚挚的问候,
答案 0 :(得分:1)
您可以选择elements
array
的{{1}}并获取struct
val arraydf = df.select(“personsList.firstName”,“personsList.lastName”) arraydf.schema.foreach(x => println(x.dataType))
这将提供以下dataType
dataType
上面给出了arrayType,我想这不是你需要的。您可以提前一步使用ArrayType(StringType,true)
ArrayType(StringType,true)
function
explode
这将打印
val arraydf = df.select(explode($"personsList.firstName"))
arraydf.schema.foreach(x => println(x.dataType))
我希望这就是你想要的。如果没有,它会给你一些想法:)