ml_*_*_0x 5 apache-spark pyspark
VectorAssembler的功能有些令人讨厌.我目前正在将一组列转换为单列向量,然后使用StandardScaler函数将缩放应用于包含的要素.但是,出于内存原因,似乎SPARK决定是否应该使用DenseVector或SparseVector来表示每行功能.但是,当您需要使用StandardScaler时,SparseVector的输入无效,只允许DenseVectors.有人知道解决方案吗?
编辑: 我决定只使用UDF函数,将稀疏矢量转换为密集矢量.有点傻但有效.
您是对的,VectorAssembler
根据使用较少内存的任何一种来选择密集与稀疏输出格式。
您不需要 UDF 即可从 转换SparseVector
为DenseVector
;只需使用toArray()
方法:
from pyspark.ml.linalg import SparseVector, DenseVector
a = SparseVector(4, [1, 3], [3.0, 4.0])
b = DenseVector(a.toArray())
Run Code Online (Sandbox Code Playgroud)
此外,除非您在创建时设置,否则StandardScaler
接受。如果确实需要去均值,则必须从所有分量中减去一个(大概是非零的)数字,这样稀疏向量就不再是稀疏的了。SparseVector
withMean=True
归档时间: |
|
查看次数: |
4250 次 |
最近记录: |