2017-12-29 30 views
-2

は、私はそれが単一の単語が含まれているリストの配列があるの変換データ型/ Scalaの

scala> a 
res17: Array[org.apache.spark.sql.Row] = Array([0_42], [big], [baller], [bitch], [shoe] ..) 

以下の通りですaと呼ばれるスカラ座での変数を持っています。私はシングルラップ配列の配列を作成しようとしていた理由は、私はword2vecを実行したいされてまあ

Array[Seq[String]] = Array(WrappedArray(0_42,big,baller,shoe,?,since,eluid......... 

の下に表示のような文字列の配列からなる単一の配列に変換したい

MLLIBを使用してスパークのモデル。

これのfit()関数は、反復可能な文字列のみを取ります。

scala> val model = word2vec.fit(b) 
<console>:41: error: inferred type arguments [String] do not conform to method fit's type parameter bounds [S <: Iterable[String]] 
+0

を使用して、例えば入力及びそれが – zenwraight

+0

例の入力でなければならない方法の例の出力を提供することができるされている次の配列([A]、[B]、[C]、[D])と出力がなければなりません配列(wrappedarray(a、b ,, c、d)) – vish

+4

[行からスパーク値を抽出する]の複製があります(https://stackoverflow.com/questions/33007840/spark-extracting-values-from-a-row ) – philantrovert

答えて

0

あなたが上場しているサンプルデータはarray of listsが、array of Rowsではありません。作成しようとしている単一の配列WrappedArrayも意味のある目的を果たしていないようです。

あなたArray[Row]データ構造内のすべての単語の文字列の配列を作成したい場合、あなたは、単に次のようにmapを使用することができます。

val df = Seq(
    ("0_42"), ("big"), ("baller"), ("bitch"), ("shoe"), ("?"), ("since"), ("eliud"), ("win") 
).toDF("word") 

val a = df.rdd.collect 
// a: Array[org.apache.spark.sql.Row] = Array(
// [0_42], [big], [baller], [bitch], [shoe], [?], [since], [eliud], [win] 
//) 

import org.apache.spark.sql.Row 

val b = a.map{ case Row(w: String) => w } 
// b: Array[String] = Array(0_42, big, baller, bitch, shoe, ?, since, eliud, win) 

を[UPDATE]

あなたがない場合

val b = Array(a.map{ case Row(w: String) => w }.toSeq) 
// b: Array[Seq[String]] = Array(WrappedArray(
// 0_42, big, baller, bitch, shoe, ?, since, eliud, win 
//)) 
+0

なぜ私は単一ラップ配列の配列を作成しようとしているのですか?MLLIBを使ってsparkでword2vecモデルを実行したいのです。これのfit()関数は、反復可能な文字列のみを取ります。私はval bを作成することができましたが、それを使ってモデルを実行することはできませんでした....次のエラーが発生しました> scala> val model = word2vec.fit(b) :41:エラー:推論型の引数[String]メソッドフィッティングの型パラメータ境界[S <:Iterable [String]] val model = word2vec.fit(b) – vish

+0

@vish、私の更新された答えをご覧ください。 –

+0

答えを – vish

0

私は最終的にそれがdoinので働いて得た:単一WrappedArrayの配列を作成したい、ここに一つのアプローチですG

val db=a.map{ case Row(word: String) => word } 
val model = word2vec.fit(b.map(l=>Seq(l))) 
+0

'f'はどこから来たのですか? –