0
我有這樣的疏火花數據幀:Pyspark稀疏矢量數據幀到scipy.spare而不收集
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和數據作爲稀疏矢量:
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')]
什麼是最有效的方式來將其轉換爲任何scipy.sparse類型without collecting?我正在處理大型矩陣,因此它不是首選。
沒錯,它很容易生成一個稀疏矩陣,用scipy收集集羣驅動程序節點中的數據,但我想以分佈方式執行此操作。 – xv70