我是新來的Spark和斯卡拉,所以我可能誤解了一些基本的東西在這裏。我試圖根據自己的數據培訓Sparks word2vec模型。根據他們的documentation,一個做到這一點的方法是培訓spark2與RDD的word2vec [字符串]
val input = sc.textFile("text8").map(line => line.split(" ").toSeq)
val word2vec = new Word2Vec()
val model = word2vec.fit(input)
的text8
數據集包含了許多話一條線,這意味着input
將成爲RDD[Seq[String]]
。
按摩我自己的數據集後,每行有一個單詞,使用不同的map
s等。我剩下一個RDD[String]
,但我似乎無法訓練word2vec模型。我試過input.map(v => Seq(v))
,它實際上給了RDD[Seq[String]]
,但是這會給每個單詞一個序列,我想這是完全錯誤的。
如何在我的字符串周圍包裹一個序列,或者是否有其他我錯過的東西?
編輯
讓我有種想它。從我的clean
是RDD[String]
我做val input = sc.parallelize(Seq(clean.collect().toSeq))
。這給了我正確的數據結構(RDD[Seq[String]]
)以適應word2vec模型。但是,在大型數據集上運行collect會導致內存不足錯誤。我不太確定他們打算如何完成這個配件?也許它不是真正的可並行化。或者,也許我應該有幾個半長的字符串序列和RDD,而不是像我現在擁有的一個長序列?
這就是我正在做的準備自己的數據。據我所知,這將給我的問題寫一個'RDD [字符串]'。這不會起作用,因爲word2vec模型似乎將RDD [Seq [String]]作爲輸入。 – burk