Ich habe eine Liste von Arrays, für die ich für jedes Element der Liste das Element mit der höchsten Frequenz finden muss. Für den folgenden Code wird der Fehler "nicht zerlegbarer Typ: 'Liste'" ausgegeben. Ich habe jedoch auch versucht, die Ergebnisliste zu parallelisieren, aber den Fehler Überreste.
# [array(0,1,1),array(0,0,1),array(1,1,0)] example of list
def finalml(listn):
return Counter(listn).most_common(1)
# the array list is return by this
results = sn.rdd.map(lambda xw: bc_knnobj.value.kneighbors(xw, return_distance=False)).collect()
labels = results.map(lambda xw: finalml(xw)).collect()
erwartete Leistung [1,0,1]
Versuchen Sie vielleicht Folgendes:
x = [[0,1,1],[0,0,1],[1,1,0]]
df = spark.createDataFrame(x)
df.show()
Eingabe df:
+---+---+---+
| _1| _2| _3|
+---+---+---+
| 0| 1| 1|
| 0| 0| 1|
| 1| 1| 0|
+---+---+---+
import pyspark.sql.functions as F
@F.udf
def mode(x):
from collections import Counter
return Counter(x).most_common(1)[0][0]
cols = df.columns
agg_expr = [mode(F.collect_list(col)).alias(col) for col in cols]
df.groupBy().agg(*agg_expr).show()
Ausgabe df:
+---+---+---+
| _1| _2| _3|
+---+---+---+
| 0| 1| 1|
+---+---+---+
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen