私はDocID、WordID、および頻度(count)を以下のように含むデータセットを持っています。 最初の3つの数字は、1.文書数、2.語彙の単語の数、そしてコレクションの単語の総数を表します。私が何をしたいかファイルを読み込んで行をベクトルとして表現する
189
1430
12300
1 2 1
1 39 1
1 42 3
1 77 1
1 95 1
1 96 1
2 105 1
2 108 1
3 133 3
は、(最初の3行を無視する)データを読み取るドキュメントごとの単語を組み合わせて、最終的にwordIDの周波数を含むベクターとして各文書を表すためです。
val data = Array(
Vectors.sparse(vocab_size, Seq((2, 1.0), (39, 1.0), (42, 3.0), (77, 1.0), (95, 1.0), (96, 1.0))),
Vectors.sparse(vocab_size, Seq((105, 1.0), (108, 1.0))),
Vectors.sparse(vocab_size, Seq((133, 3.0))))
問題は、私はないだということである:文献1、2及び3の表現がされる上記データセットに基づい
は(vocab_size
は、データの第2行によって抽出することができることに留意されたいです)ファイル
.txt.gz
をRDDとして読み込み、上記のように疎ベクトルの配列を作成する方法を確かめてください。私は実際にPCAトランスに
data
配列を渡したいと思います。 (
groupByKey
方法はメモリに各ドキュメントのすべてのキーをロードすること
sc.textFile("path/to/file").flatMap(r => r.split(' ') match {
case Array(doc, word, freq) => Some((doc.toInt, (word.toInt, freq.toDouble)))
case _ => None
}).groupByKey().mapValues(a => Vectors.sparse(vocab_size, a.toSeq))
注意、あなたが代わりにその変種reduceByKey
またはaggregateByKey
のいずれかを使用する場合があります。このような
'textFiles'で読み込み、' map'で解析します。参照してください:http://stackoverflow.com/questions/42761912/how-to-read-gz-compressed-file-by-pyspark –
問題は、基本的に文書ごとの単語を結合し、その表現を疎ベクトルに入れる方法です。 –