簡體   English   中英

將Spark Word2Vec矢量傾銷到文件中

[英]Dumping spark word2vec vectors to a file

我正在使用spark mllib生成單詞向量。 我希望擬合所有數據,然后獲取經過訓練的單詞向量並將其轉儲到文件中。

我正在這樣做:

JavaRDD<List<String>> data = javaSparkContext.parallelize(streamingData, partitions);
Word2Vec word2vec = new Word2Vec();
Word2VecModel model = word2vec.fit(data);

所以,如果我的訓練資料中有這樣的句子

I love Spark

我想將輸出保存為以下文件:

I       0.03 0.53 0.12...
love    0.31 0.14 0.12...
Spark   0.41 0.18 0.84...

訓練后,我從這樣的模型對象中獲取向量

Map<String, float[]> wordMap = JavaConverters.mapAsJavaMapConverter(model.getVectors()).asJava();
List<String> wordvectorlist = Lists.newArrayList();
for (String s : wordMap.keySet()) {
    StringBuilder wordvector = new StringBuilder(s);
    for (float f : wordMap.get(s)) {
        wordvector.append(" " + f);
    }
    wordvectorlist.add(wordvector.toString());
    if (wordvectorlist.size() > 1000000) {
        writeToFile(wordvectorlist);
        wordvectorlist.clear();
    }

}

我將為大量數據(約1.5 TB)生成這些字向量,因此,我可能無法將返回的對象Word2VecModel保存在驅動程序的內存中。 如何將這個wordvector映射存儲為rdd,這樣就可以寫入文件而無需將完整的映射存儲在驅動程序內存中?

我研究了deeplearning4j的word2vec實現,但是該實現還需要將所有向量加載到驅動程序內存中。

Word2VecModel具有保存功能,可以將其以自己的格式保存到磁盤中。這將創建一個名為data的目錄,該目錄包含該數據的拼寫文件和一個具有人類可讀的元數據的元數據文件。

現在,您可以讀取實木復合地板文件並自己進行轉換,也可以執行spark.read.parquet將其讀取到數據幀中。 每行將包含一些地圖,您可以按照自己的方式編寫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM