1

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

这是一个示例,这是 StructType Object 的架构:

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

此致,

4

1 回答 1

1

您可以选择elementsarray struct获取dataType

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

这将给出以下数据类型

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

以上方式给出了arrayType,我猜这不是你需要的。您可以提前一步使用explode 功能

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

这将打印

StringType

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

于 2017-06-21T11:09:30.380 回答