Я новичок в Spark и Scala, поэтому я мог неправильно понять некоторые основные вещи. Я пытаюсь обучить модель Sparks 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
и т. д., у меня остался 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. Однако при сборе большого набора данных возникает ошибка нехватки памяти. Я не совсем уверен, как они собираются делать примерку? Может быть, это не совсем параллелизуется. Или, может быть, я должен иметь несколько полудлинных последовательностей строк внутри и RDD вместо одной длинной последовательности, как сейчас?