2017-10-04 11 views
0

I이 부족한 점화 dataframe 가지고Pyspark 스파 스 벡터 dataframe을 수집하지 않고 scipy.spare하는

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')] 
:

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| 
+---------+-------+---------+-------+-------+--------+ 

내가 희소 벡터로서 인덱스 ID와 데이터 열이 두 dataframe로 변환을

scipy.sparse 유형 without collecting으로 변환하는 가장 효율적인 방법은 무엇입니까? 큰 행렬로 작업하고 있으므로 선호하는 옵션이 아닙니다.

답변

0

스파 스 매트릭스는 어떤 모양입니까? 내가 아니라 사물의 scipy 끝을 알고 있지만

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.]]) 

, 나는 pyspark를 모르는 :

그냥 테이블을 째려하고 pid 제목을 무시하고 내가 가진 희소 행렬을 생성 할 수 있습니다. 팬더는 자체적으로 드문 드문 표현과 그로부터 scipy 행렬을 만드는 몇 가지 기능을 가지고 있습니다. 나는 그것에 관한 몇 가지 질문을했다.

+0

그렇습니다. scipy를 사용하여 클러스터의 드라이버 노드에서 데이터를 수집하는 스파 스 매트릭스를 쉽게 생성 할 수 있지만 분산 된 방식으로이 작업을 수행하려고합니다. – xv70