Ich habe diese sparse Funkendatenrahmen:Pyspark spärlichen Vektordatenrahmen scipy.spare ohne Sammeln
In [50]: data.show()
+---------+-------+---------+-------+-------+--------+
| pid| 111516| 387745|1211811|1857606| 2187005|
+---------+-------+---------+-------+-------+--------+
| 65197201| 0.0| 0.0|50239.0| 0.0| 0.0|
| 14040501|89827.0| 0.0| 0.0| 0.0| 0.0|
|887847003| 0.0| 0.0| 0.0| 0.0|190560.0|
|778121903| 0.0| 0.0| 0.0|95600.0| 0.0|
| 20907001| 0.0|8727749.0| 0.0| 0.0| 0.0|
+---------+-------+---------+-------+-------+--------+
I Umwandlung in eine zweispaltige Datenrahmen mit dem Index ID und die Daten als Vektoren sparse:
input_cols = [x for x in data.columns if x!='pid']
sparse_vectors = (VectorAssembler(inputCols=input_cols, outputCol="features").transform(data).select("pid", "features"))
In [46]: sparse_vectors.show()
+---------+-------------------+
| pid| features|
+---------+-------------------+
| 65197201| (5,[2],[50239.0])|
| 14040501| (5,[0],[89827.0])|
|887847003| (5,[4],[190560.0])|
|778121903| (5,[3],[95600.0])|
| 20907001|(5,[1],[8727749.0])|
+---------+-------------------+
In [51]: sparse_vectors.dtypes
Out[51]: [('pid', 'string'), ('features', 'vector')]
Was ist der effizienteste Weg, um dies zu jedem scipy.sparse Typ without collecting zu konvertieren? Ich arbeite mit großen Matrizen, daher ist dies keine bevorzugte Option.
Das ist richtig, es ist einfach, eine spärliche Matrix zu erzeugen, die die Daten im Treiberknoten des Clusters mit scipy sammelt, aber ich möchte das auf eine verteilte Weise machen. – xv70