【发布时间】:2016-11-09 08:21:19
【问题描述】:
我目前正在尝试在火花集群上执行 LDA。我有一个这样的RDD
>>> myRdd.take(2)
[(218603, [0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0]), (95680, [0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0])]
但打电话
model = LDA.train(myRdd, k=5, seed=42)
从工作人员那里给出以下错误:
org.apache.spark.SparkException:作业因阶段失败而中止:阶段 5874.0 中的任务 0 失败 4 次,最近一次失败:阶段 5874.0 中丢失任务 0.3):java.lang.ClassCastException:[Ljava.lang.目的;不能转换为 java.util.List
除了显而易见的错误外,我不知道如何解释此错误,因此我们将不胜感激; mllib 的 LDA 上的文档比较少
我从以下过程中获取 RDD,从包含“doc_label”和“terms”列的数据框 document_instances 开始
hashingTF = HashingTF(inputCol="terms", outputCol="term_frequencies", numFeatures=10)
tf_matrix = hashingTF.transform(document_instances)
myRdd = tf_matrix.select("doc_label", "term_frequencies").rdd
直接使用它会产生同样的错误。现在,这是在pyspark.ml.feature中使用HashingTF,所以我怀疑可能是mllib中的Vector与ml中的Vector之间存在冲突,而是直接使用Vector.fromML()函数进行映射给出同样的错误,就像使用
myRdd = tf_matrix.select(...).rdd.map(lambda old_row: \
(old_row.term, old_row.term_frequencies.toArray().tolist()))
myRdd = tf_matrix.select(...).rdd.map(lambda old_row: \
(old_row.term, old_row.term_frequencies.toArray()))
myRdd = tf_matrix.select(...).rdd.map(lambda old_row: \
(old_row.term, Vectors.fromML(old_row.term_frequencies)))
myRdd = tf_matrix.select(...).rdd.map(lambda old_row: \
(old_row.term, old_row.term_frequencies))
【问题讨论】:
标签: apache-spark pyspark apache-spark-mllib