umgewandelt werden Ich versuche derzeit, LDA auf einem Funkencluster durchzuführen. Ich habe eine RDD, so dassPyspark mllib LDA Fehler: Objekt kann nicht in java.util.List
>>> 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])]
aber
model = LDA.train(myRdd, k=5, seed=42)
gibt die folgenden Fehler von einem Arbeiter Aufruf:
org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 5874.0 failed 4 times, most recent failure: Lost task 0.3 in stage 5874.0): java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to java.util.List
Ich weiß nicht, wie man diese Fehler zu interpretieren, abgesehen von den offensichtlichen , so würde jeder Rat geschätzt werden; die Dokumentation über LDA mllib das ist eher spärlich
ich die RDD aus dem folgenden Verfahren erhalten, mit einem Datenrahmen document_instances
beginnen, die Spalten „doc_label“ und „Begriffe“
hashingTF = HashingTF(inputCol="terms", outputCol="term_frequencies", numFeatures=10)
tf_matrix = hashingTF.transform(document_instances)
myRdd = tf_matrix.select("doc_label", "term_frequencies").rdd
Mit dieser direkt den gleichen Fehler hat gibt . Nun verwendet dies HashingTF in pyspark.ml.feature, so vermutete ich, dass ein Konflikt durch den Unterschied zwischen Vector in mllib vs Vector in ml verursacht werden kann, aber Mapping direkt mit der Vector.fromML() -Funktion gibt den gleichen Fehler, wie es tut mit
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))