Ken*_*ams 10 schema scala dataframe apache-spark
在DataFrameApache Spark中的一个对象(我正在使用Scala接口),如果我在迭代它的Row对象,有没有办法按名称提取值?我可以看到如何做一些非常尴尬的事情:
def foo(r: Row) = {
val ix = (0 until r.schema.length).map( i => r.schema(i).name -> i).toMap
val field1 = r.getString(ix("field1"))
val field2 = r.getLong(ix("field2"))
...
}
dataframe.map(foo)
Run Code Online (Sandbox Code Playgroud)
我认为必须有一个更好的方法 - 这是非常冗长的,它需要创建这个额外的结构,它还需要明确地知道类型,如果不正确,将产生运行时异常而不是编译时错误.
小智 25
你可以使用" getAs"org.apache.spark.sql.Row
r.getAs("field1")
r.getAs("field2")
Run Code Online (Sandbox Code Playgroud)
了解有关getAs的更多信息(java.lang.String fieldName)