在SPARK SCALA中按名称获取行类型结构的元素

时间:2016-11-10 11:05:42

标签: scala apache-spark apache-spark-sql

在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)

1 个答案:

答案 0 :(得分:16)

您可以访问struct元素,我首先从顶层Row中提取另一个Row(结构在火花中被建模为另一个Row,如下所示:

val level1 = row.getAs[Row]("struct").getAs[String]("level1")