如何提取数组的 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
struct
的 elements
并获得 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
希望这就是您想要的。如果没有,它会给你一些想法:)
我尝试在 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
struct
的 elements
并获得 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
希望这就是您想要的。如果没有,它会给你一些想法:)