(Verwendung von Apache Spark-1.6.0) Hallo,rdd.toDF() Änderungen schweben Keine
Ich habe ein SparseVector
(die im Grunde von zwei numpy Arrays nämlich values
und indices
definiert ist. Ich möchte erhalten die höchsten Werte und ihre Indizes, es zu tun, die ich benutze:
r = df.map(lambda row: Row(**dict(row.asDict(), top=f(vec)))))
, wo die f Funktion [ [sorted_indices], [sorted_values] ]
die folgende Art und Weise zurück:
def f(v):
m, i = zip(*sorted(zip(v.values, v.indices), reverse=True))
m = [ float(j) for j in m]
i = [ int(j) for j in i]
return [i, m]
An diesem Punkt r
ist ein pyspark.rdd.PipelinedRDD
und ich kann überprüfen, ob meine Werte in Ordnung sind, zum Beispiel.
r.first().top[1]
Das Problem kommt, wenn ich versuche, eine DataFrame
zu erhalten mit:
df2 = r.toDF()
Dann sind meine Werte nur None
, das heißt
df2.first().top[1] # i.e. the highest values of the first Vector
zeigt None
.
So sieht es wirklich wie die Funktion zerstört meine Daten aus. Dies wäre ziemlich seltsam, wenn Spark nicht mit dem eingebauten Float-Typ umgehen kann.
Irgendwelche Ideen? thx
Schnell, präzise: beeindruckend, vielen Dank – pltrdy