Apache Spark:按名称获取 Row 的元素
Apache Spark: get elements of Row by name
在 Apache Spark 的 DataFrame
对象中(我使用的是 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)
我想一定有更好的方法 - 这很冗长,它需要创建这个额外的结构,还需要明确知道类型,如果不正确,将产生运行时异常而不是编译时异常错误。
Scala 目前不支持此功能 API。最接近的是 this JIRA titled "Support converting DataFrames to typed RDDs"
您可以使用 org.apache.spark.sql.Row
中的“getAs
”
r.getAs("field1")
r.getAs("field2")
在 Apache Spark 的 DataFrame
对象中(我使用的是 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)
我想一定有更好的方法 - 这很冗长,它需要创建这个额外的结构,还需要明确知道类型,如果不正确,将产生运行时异常而不是编译时异常错误。
Scala 目前不支持此功能 API。最接近的是 this JIRA titled "Support converting DataFrames to typed RDDs"
您可以使用 org.apache.spark.sql.Row
getAs
”
r.getAs("field1")
r.getAs("field2")