16

までにArray[org.apache.spark.sql.Row]戻りましたsqc.sql(sqlcmd).collect():

Array([10479,6,10], [8975,149,640], ...)

個々の値を取得できます。

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

PS。pixels(0)(0).toString.toIntまたははできますpixels(0).getString(0).toIntが、彼らは間違っていると感じています...

4

3 に答える 3

2

Rowクラス( https://spark.apache.org/docs/1.1.0/api/scala/index.html#org.apache.spark.sql.packageも参照) にはgetInt(i: Int)、メソッドgetDouble(i: Int)などがあります。

また、a は、どの列にどのデータ型があるかをSchemaRDD示すRDD[Row] プラスaであることに注意してください。schemaそうした場合、その情報を持たない.collect()のみが得られます。したがって、データがどのように見えるかを確実に把握していない限り、 からスキーマを取得し、行を収集してから、正しい型情報を使用して各フィールドにアクセスします。Array[Row]SchemaRDD

于 2015-01-20T01:52:08.530 に答える
0

答えは関連しています。代わりにcollectを使用する必要はなく、メソッドを呼び出す必要がありgetInt getStringgetAsデータ型が複雑な場合にも同様です

val popularHashTags = sqlContext.sql("SELECT hashtags, usersMentioned, Url FROM tweets")
var hashTagsList =  popularHashTags.flatMap ( x => x.getAs[Seq[String]](0)) 
于 2015-01-20T04:41:07.400 に答える