我是新来的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