从`org.apache.spark.sql.Row`中提取信息

sds*_*sds 15 scala apache-spark apache-spark-sql

我已经Array[org.apache.spark.sql.Row]回来了sqc.sql(sqlcmd).collect():

Array([10479,6,10], [8975,149,640], ...)
Run Code Online (Sandbox Code Playgroud)

我可以得到个人价值观:

scala> pixels(0)(0)
res34: Any = 10479
Run Code Online (Sandbox Code Playgroud)

但他们Any不是Int.

我如何将它们提取出来Int

最明显的解决方案不起作用:

scala> pixels(0).getInt(0)
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Int
Run Code Online (Sandbox Code Playgroud)

PS.我可以做pixels(0)(0).toString.toIntpixels(0).getString(0).toInt,但他们感觉不对劲......

Jus*_*ony 13

使用getInt应该工作.这是一个人为的例子作为概念证明

import org.apache.spark.sql._
sc.parallelize(Array(1,2,3)).map(Row(_)).collect()(0).getInt(0)
Run Code Online (Sandbox Code Playgroud)

这回报1

然而,

sc.parallelize(Array("1","2","3")).map(Row(_)).collect()(0).getInt(0)
Run Code Online (Sandbox Code Playgroud)

失败.所以,看起来它是以字符串形式出现的,你必须手动转换为int.

sc.parallelize(Array("1","2","3")).map(Row(_)).collect()(0).getString(0).toInt
Run Code Online (Sandbox Code Playgroud)

文件指出getInt:

将列i的值作为int返回.如果值不是整数,或者它是null,则此函数将抛出异常.

所以,它似乎不会试图为你施展