2017-10-03 3 views
1

Ich versuche, diese Zeile auf einem CoordinateMatrix ... in ScalaMatrixEntry nicht iterable bei der Verarbeitung von CoordinateMatrix ... pyspark MLlib

test = test.entries.map(lambda (i, j, v): (j, (i, v))) 

wo das Äquivalent scheint auszuführen, aber in pyspark funktioniert nicht. Der Fehler, den ich bekommen, wenn die Leitung ausführt ...

'MatrixEntry' object is not iterable 

Und bestätigt, dass ich mit einem CoordinateMatrix arbeite ...

>>> test = test_coord.entries 
>>> test.first() 
>>> MatrixEntry(0, 0, 7.0) 

Wer weiß, was aus sein könnte?

Antwort

2

Angenommen test ist ein CoordinatedMatrix, dann:

test.entries.map(lambda e: (e.j, (e.i, e.value))) 

Eine Randbemerkung: Sie kein Tupel in einer Lambda-Funktion entpacken kann. So map(lambda (x, y, z):) wird in diesem Fall nicht funktionieren, obwohl es nicht der Grund scheint, der fehlschlägt.


Beispiel:

test = CoordinateMatrix(sc.parallelize([(1,2,3), (4,5,6)])) 
test.entries.collect() 
# [MatrixEntry(1, 2, 3.0), MatrixEntry(4, 5, 6.0)] 
test.entries.map(lambda e: (e.j, (e.i, e.value))).collect() 
# [(2L, (1L, 3.0)), (5L, (4L, 6.0))] 
+1

es Ihnen danken! Ich dachte, die Variablen (i j v) müssten links sein – cpd1

Verwandte Themen