【问题标题】:Pyspark mllib LDA error: Object cannot be cast to java.util.ListPyspark mllib LDA 错误:对象无法转换为 java.util.List
【发布时间】: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


    【解决方案1】:

    因此,事实证明,当 spark 文档说“文档的 RDD,它们是文档 ID 和术语(字)计数向量的 元组”时,它有点误导。可能是我理解错了,但是当把元组改成列表的时候,这个错误好像就消失了(虽然好像换成了别的错误)

    变化

    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)])
    

    与他们的示例代码比较后,似乎缓解了所提出的问题

    http://spark.apache.org/docs/latest/api/python/pyspark.mllib.html#pyspark.mllib.clustering.LDA

    【讨论】:

      猜你喜欢
      • 2015-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多