2016-02-29 66 views
1

我使用下面的代碼使用的Spark與Python計算TFIDF:鏈接結果TFIDF稀疏矢量原始憑證在星火

hashingTF = HashingTF() 
    tf = hashingTF.transform(documents) 
    idf = IDF().fit(tf) 
    tfidf = idf.transform(tf) 
    for k in tfidf.collect(): 
     print(k) 

我得到了三個文件,結果如下:

(1048576,[558379],[1.43841036226]) 
    (1048576,[181911,558379,959994], [0.287682072452,0.287682072452,0.287682072452]) 
    (1048576,[181911,959994],[0.287682072452,0.287682072452]) 

假設我有成千上萬的文檔,知道如何將生成的TFIDF稀疏向量鏈接到原始文檔,因爲我知道我不關心將哈希鍵逆轉爲原始項。

回答

1

由於兩個documentstfidf具有相同的形狀(分區數目,每個分區元素的數量),有需要任何操作洗牌,你可以簡單地zip都RDDS:

documents.zip(tfidf) 

倒車HashingTF是for an obvious reason不可能。

+0

我可以控制分區數量,但是如何控制每個分區的元素數量? –

+0

你不能。那麼...你可以應用不同的低級轉換,但是沒有辦法直接做。這就是爲什麼'zip'只適用於像這樣的一些有限情況。否則,您需要唯一的標識符並加入。 – zero323

+0

啊,標識符和加入,對我來說是非常好的一點,我對我的文檔有一個標識符。但是我如何執行上面的代碼將它包含在tfidf RDD中? –