Sor*_*los 6 scala apache-spark apache-spark-sql
我有一个数据框的行,我想将它转换为Map [String,Any],它将列名映射到该列的行中的值.
有一个简单的方法吗?
我是为字符串值做的
def rowToMap(row:Row): Map[String, String] = {
row.schema.fieldNames.map(field => field -> row.getAs[String](field)).toMap
}
val myRowMap = rowToMap(myRow)
Run Code Online (Sandbox Code Playgroud)
如果该行包含其他值,而不是像String这样的特定值,则代码变得更加混乱,因为该行没有方法 .get(field)
有任何想法吗?
Psi*_*dom 10
你可以使用getValuesMap:
val df = Seq((1, 2.0, "a")).toDF("A", "B", "C")
val row = df.first
Run Code Online (Sandbox Code Playgroud)
得到Map[String, Any]:
row.getValuesMap[Any](row.schema.fieldNames)
// res19: Map[String,Any] = Map(A -> 1, B -> 2.0, C -> a)
Run Code Online (Sandbox Code Playgroud)
或者你可以得到Map[String, AnyVal]这个简单的情况,因为值不是复杂的对象
row.getValuesMap[AnyVal](row.schema.fieldNames)
// res20: Map[String,AnyVal] = Map(A -> 1, B -> 2.0, C -> a)
Run Code Online (Sandbox Code Playgroud)
注意:返回的值类型getValuesMap可以标记为任何类型,因此您不能依赖它来确定您拥有的数据类型,而是需要记住您从一开始就拥有的内容.
| 归档时间: |
|
| 查看次数: |
12784 次 |
| 最近记录: |