在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")
Run Code Online (Sandbox Code Playgroud)
但在我的情况下,值具有以下架构
v1: struct (nullable = true)
| |-- level1: string (nullable = true)
| |-- level2: string (nullable = true)
| |-- level3: string (nullable = true)
| |-- level4: string (nullable = true)
| |-- level5: string (nullable = true)
Run Code Online (Sandbox Code Playgroud)
如果值具有上述结构,我应该用什么来代替这一行来使代码工作.
row.getAs[String](values)
Run Code Online (Sandbox Code Playgroud) 我有以下数据帧
+-----+-----+-----+ .......+-------+
|item1|item2|item3|........| itemN |
+-----+-----+-----+........|-------+
| v1| v2| v3|........| vN----+
| v4| v5| v6|........| v2N---+
+-----+-----+-----+........|-------+
Run Code Online (Sandbox Code Playgroud)
这里item1,item2和item3是列名,表由1行v1,v2,v3组成.
我想把它变成
colA colB
item1 v1
item2 v2
item3 v3
. .
. .
. .
Run Code Online (Sandbox Code Playgroud)
这里有两列,比如说colA和colB,行如图所示.
如何使用scala在spark中进行这种转换?