【发布时间】:2017-10-26 08:41:41
【问题描述】:
我有一个文档语料库,我正在将其读入 spark 数据框。
我已经对文本进行了标记和矢量化,现在我想将矢量化数据输入到 mllib LDA 模型中。 LDA API 文档似乎要求数据是:
rdd – 文档的 RDD,它是文档 ID 和术语(单词)计数向量的元组。术语计数向量是具有固定大小词汇表的“词袋”(其中词汇表大小是向量的长度)。文档 ID 必须是唯一的并且 >= 0。
如何从我的数据框获取合适的 rdd?
from pyspark.mllib.clustering import LDA
from pyspark.ml.feature import Tokenizer
from pyspark.ml.feature import CountVectorizer
#read the data
tf = sc.wholeTextFiles("20_newsgroups/*")
#transform into a data frame
df = tf.toDF(schema=['file','text'])
#tokenize
tokenizer = Tokenizer(inputCol="text", outputCol="words")
tokenized = tokenizer.transform(df)
#vectorize
cv = CountVectorizer(inputCol="words", outputCol="vectors")
model = cv.fit(tokenized)
result = model.transform(tokenized)
#transform into a suitable rdd
myrdd = ?
#LDA
model = LDA.train(myrdd, k=2, seed=1)
PS:我使用的是 Apache Spark 1.6.3
【问题讨论】:
-
如果我可能会问,你为什么使用 MLlib 的 LDA ? LDA 可用于 spark-ml
-
只是试图在几个教程中拼接。不反对采取不同的方法。
-
那我建议看一下spark-ml的官方文档。这很简单。您的价值结果已准备好照常提供。
-
刚刚检查了我的 sprk 版本。它是 1.6 并且在 pyspark.ml.clustering 中似乎没有 LDA
-
假期周末后需要尝试一下。谢谢。
标签: apache-spark pyspark apache-spark-mllib apache-spark-ml