Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 从“org.apache.spark.sql.Row”中提取信息`_Scala_Apache Spark_Apache Spark Sql - Fatal编程技术网

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

Scala 从“org.apache.spark.sql.Row”中提取信息`,scala,apache-spark,apache-spark-sql,Scala,Apache Spark,Apache Spark Sql,我有sqc.sql(sqlcmd.collect()返回的Array[org.apache.spark.sql.Row]: 我可以得到各个值: scala> pixels(0)(0) res34: Any = 10479 但是它们是Any,而不是Int 如何将它们提取为Int 不起作用: scala> pixels(0).getInt(0) java.lang.ClassCastException: java.lang.String cannot be cast to java.l

我有
sqc.sql(sqlcmd.collect()
返回的
Array[org.apache.spark.sql.Row]

我可以得到各个值:

scala> pixels(0)(0)
res34: Any = 10479
但是它们是
Any
,而不是
Int

如何将它们提取为
Int

不起作用:

scala> pixels(0).getInt(0)
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Int
另外,我可以做
pixels(0)(0).toString.toInt
pixels(0).getString(0).toInt
,但他们感觉不对…

这个(也可以看到)有方法
getInt(I:Int)
getDouble(I:Int)
等等


还要注意,
SchemaRDD
是一个
RDD[Row]
加上一个
schema
,它告诉您哪个列具有哪个数据类型。如果执行
.collect()
操作,则只会得到一个不包含该信息的
数组[行]
。因此,除非您确实知道您的数据是什么样的,否则从
SchemaRDD
获取模式,然后收集行,然后使用正确的类型信息访问每个字段。

使用
getInt
应该可以。这里有一个人为的例子作为概念证明

import org.apache.spark.sql._
sc.parallelize(Array(1,2,3)).map(Row(_)).collect()(0).getInt(0)
这是报税表1

但是,

sc.parallelize(Array("1","2","3")).map(Row(_)).collect()(0).getInt(0)
失败了。所以,看起来它是以字符串的形式出现的,您必须手动转换为int

sc.parallelize(Array("1","2","3")).map(Row(_)).collect()(0).getString(0).toInt
状态为
getInt

以int形式返回列i的值。如果值为at,i不是整数或为null,则此函数将引发异常


因此,它不会试图为你施展才华,因为答案似乎是相关的。您不需要使用collect,而是需要在数据类型复杂的情况下调用方法
getInt
getString
getAs

val popularHashTags = sqlContext.sql("SELECT hashtags, usersMentioned, Url FROM tweets")
var hashTagsList =  popularHashTags.flatMap ( x => x.getAs[Seq[String]](0)) 

我猜是因为它是一根绳子?我不知道您的数据来自哪里,但是如果您查看模式,它应该表明第一列的类型是String。注意:在Spark 1.3中,SchemaRDD称为DataFrame。
val popularHashTags = sqlContext.sql("SELECT hashtags, usersMentioned, Url FROM tweets")
var hashTagsList =  popularHashTags.flatMap ( x => x.getAs[Seq[String]](0))