Apache spark Pyspark mllib LDA错误:无法将对象强制转换为java.util.List

Apache spark Pyspark mllib LDA错误:无法将对象强制转换为java.util.List,apache-spark,pyspark,apache-spark-mllib,Apache Spark,Pyspark,Apache Spark Mllib,我目前正在尝试在spark群集上执行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.ap

我目前正在尝试在spark群集上执行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.ClassCastxception:[Ljava.lang.Object;无法转换为java.util.List

除了显而易见的错误之外,我不知道如何解释这个错误,因此任何建议都将不胜感激;关于mllib的LDA的文档非常稀少

我通过以下过程获得RDD,首先是一个数据框
document\u实例
,其中包含“doc\u label”和“terms”列

直接使用它会产生相同的错误。现在,在中使用了HashingTF,因此我怀疑可能是由于mllib中的向量与ml中的向量之间的差异导致了冲突,但是直接使用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))

因此,spark文档的“RDD of documents,即文档ID和术语(word)计数向量的元组”有点误导。也许我误解了,但是当将元组更改为列表时,这个错误似乎消失了(尽管它似乎已被另一个错误所取代)

改变

myRdd = tf_matrix.select(...).rdd.map(lambda old_row: \
                                    (old_row.term, old_row.term_frequencies))

在与示例代码进行比较后,似乎缓解了问题

myRdd = tf_matrix.select(...).rdd.map(lambda old_row: \
                                    (old_row.term, old_row.term_frequencies))
myRdd = tf_matrix.select(...).rdd.map(lambda old_row: \
                                    [old_row.term, Vectors.fromML(old_row.term_frequencies)])