如何提取数组的 ElementType 作为 StructType 的实例

How to extract the ElementType of an Array as an instance of StructType

我尝试在 spark 中分解复杂数据帧的结构。我只对根下的嵌套数组感兴趣。问题是我无法从 StructField 的类型中检索 ElementType。

这是一个示例,这个结构类型对象的模式:

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 方法。

此致,

您可以 select array structelements 并获得 dataType

val arraydf = df.select("personsList.firstName", "personsList.lastName") arraydf.schema.foreach(x => println(x.dataType))

这将给出以下数据类型

ArrayType(StringType,true)
ArrayType(StringType,true)

以上方法给出了 arrayType,我猜这不是您所需要的。您可以更进一步使用 explode function

val arraydf = df.select(explode($"personsList.firstName"))
arraydf.schema.foreach(x => println(x.dataType))

这将打印

StringType

希望这就是您想要的。如果没有,它会给你一些想法:)