2017-10-04 3 views
0

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.

Antwort

0

Wie soll die dünne Matrix aussehen?

einfach die Tabelle Anglotzen, und ignorieren die pid Schriften kann ich eine Sparse Matrix mit erzeugen:

In [456]: from scipy import sparse 
In [457]: rows = [0,1,2,3,4] 
In [458]: cols = [2,0,4,3,1] 
In [459]: vals = [50239.0,89827.0,190560.0,95600,8727749] 
In [460]: M = sparse.coo_matrix((vals,(rows,cols)),shape=(5,5)) 
In [461]: M 
Out[461]: 
<5x5 sparse matrix of type '<class 'numpy.float64'>' 
    with 5 stored elements in COOrdinate format> 
In [462]: M.A 
Out[462]: 
array([[  0.,  0., 50239.,  0.,  0.], 
     [ 89827.,  0.,  0.,  0.,  0.], 
     [  0.,  0.,  0.,  0., 190560.], 
     [  0.,  0.,  0., 95600.,  0.], 
     [  0., 8727749.,  0.,  0.,  0.]]) 

Während ich das scipy Ende der Dinge gut wissen, ich weiß pyspark nicht. Pandas hat eine eigene spärliche Darstellung und einige Funktionen zum Erstellen von scipy-Matrizen. Ich habe ein paar SO-Fragen dazu (die veraltet sein könnten) gefolgt.

+0

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

Verwandte Themen