如何提取Array的ElementType作为StructType的实例

时间:2017-06-21 10:32:50

标签: json scala spark-dataframe apache-spark-1.6

我尝试在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方法。

致以最诚挚的问候,

1 个答案:

答案 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))

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