我有以下DataFrame df
:
id | type | count
-------------------
1 | A | 2
2 | B | 4
我想传递此df
的每一行作为函数saveObj
的输入。
df.foreach( row => {
val list = List("id" -> row.get(0),"type" -> row.get(1))
saveObj(list)
})
在saveObj
内,我想访问list
值,如下所示:list("id")
,list("type")
。
如何避免使用列索引?:row.get(0)
或row.get(1)
。
答案 0 :(得分:2)
您可以使用需要列名的getAs
。首先创建一个您感兴趣的列名列表 - 您可以将它们映射到所需的元组列表:
// can also use df.columns.toList to get ALL columns
val columns = List("id", "type")
df.foreach(row => {
saveObj(columns.map(name => name -> row.getAs[Any](name)))
})
或者,您可以通过使用模式匹配来利用Row.apply
- 但在这种情况下仍需要知道Row
中列的顺序并重复列名称:
df.foreach(_ match {
case Row(id: Any, typ: Any, _) => saveObj(List("id" -> id, "type" -> typ))
})