Scala ApacheSpark:按名称获取行的元素
在apachespark中的Scala ApacheSpark:按名称获取行的元素,scala,apache-spark,schema,dataframe,Scala,Apache Spark,Schema,Dataframe,在apachespark中的DataFrame对象中(我使用的是Scala接口),如果我在其行对象上进行迭代,有没有办法按名称提取值?我知道如何做一些非常尴尬的事情: 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.getLon
DataFrame
对象中(我使用的是Scala接口),如果我在其行
对象上进行迭代,有没有办法按名称提取值?我知道如何做一些非常尴尬的事情:
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)
我想一定有更好的方法-这相当冗长,需要创建这个额外的结构,还需要明确知道类型,如果不正确,将产生运行时异常而不是编译时错误。Scala API目前不支持这种方法。最接近的是您可以使用
org.apache.spark.sql.Row
r.getAs("field1")
r.getAs("field2")
了解更多关于我认为应该是r.getAs[Any](“fieldName”)