2016-07-08 18 views
6

私は次の操作を実行します。scala wrappedArrayを反復処理する方法は? (スパーク)

val tempDict = sqlContext.sql("select words.pName_token,collect_set(words.pID) as docids 
           from words 
           group by words.pName_token").toDF() 

val wordDocs = tempDict.filter(newDict("pName_token")===word) 

val listDocs = wordDocs.map(t => t(1)).collect() 

listDocs: Array 

[Any] = Array(WrappedArray(123, 234, 205876618, 456)) 

私の質問は、私はこのラップ配列の反復処理や、これはリストに変換します方法です。私はlistDocsのために取得するオプションがあります:applyasInstanceOfcloneisInstanceOflengthtoStringupdate はどのように進むのか?

答えて

6

これを解決する1つの方法があります。今** ヴァルarrDocs = listDocs(0) ヴァル・TEMP = arrDocs.asInstanceOf [mutable.WrappedArray [ロング]] **温度:実は私はこれをしなかった、これは私の事件を解決するようだ

import org.apache.spark.sql.Row 
import org.apache.spark.sql.functions._ 
import scala.collection.mutable.WrappedArray 

val data = Seq((Seq(1,2,3),Seq(4,5,6),Seq(7,8,9))) 
val df = sqlContext.createDataFrame(data) 
val first = df.first 

// use a pattern match to deferral the type 
val mapped = first.getAs[WrappedArray[Int]](0) 

// now we can use it like normal collection 
mapped.mkString("\n") 

// get rows where has array 
val rows = df.collect.map { 
    case Row(a: Seq[Any], b: Seq[Any], c: Seq[Any]) => 
     (a, b, c) 
} 
rows.mkString("\n") 
+0

基本的に私にイテレータを与えます。 – boY

+0

ありがとう@boY、私は答えを更新しました。前の1つは少し冗長でした。 –

+0

私はWrappedArrayに問題があり、Seq [Int]に置き換えることができました。 – jspooner

関連する問題