在Apache Spark中的DataFrame对象中(我使用Scala接口),如果我迭代其Row对象,有没有办法按名称提取结构值?
我使用下面的代码按名称提取,但我在如何读取struct值方面遇到问题。
如果值是字符串类型,那么我们可以这样做:
val resultDF=joinedDF.rdd.map{row=>
val id=row.getAs[Long]("id")
val values=row.getAs[String]("slotSize")
val feilds=row.getAs[String](values)
(id,values,feilds)
}.toDF("id","values","feilds")
但在我的情况下,值具有以下架构
v1: struct (nullable = true)
| |-- level1: string (nullable = true)
| |-- level2: string (nullable = true)
| |-- level3: string (nullable = true)
| |-- level4: string (nullable = true)
| |-- level5: string (nullable = true)
如果值具有上述结构,我应该用什么来代替这一行来使代码工作。
row.getAs[String](values)
答案 0 :(得分:16)
您可以访问struct
元素,我首先从顶层Row
中提取另一个Row
(结构在火花中被建模为另一个Row
,如下所示:
val level1 = row.getAs[Row]("struct").getAs[String]("level1")