稀疏与密集向量PySpark

时间:2018-07-17 15:52:12

标签: python apache-spark machine-learning pyspark sparse-matrix

我怎么知道我应该在PySpark中使用稀疏表示还是密集表示?我了解它们之间的区别(稀疏仅通过存储非零索引和值来节省内存),但是从性能角度来看,是否有任何一般的启发式方法描述何时在稀疏矢量上使用稀疏矢量?

是否有通用的“截止”维和0值的百分比,通常最好使用稀疏矢量?如果没有,我应该如何做出决定?谢谢。

1 个答案:

答案 0 :(得分:1)

要记住的事情是pyspark.ml.linalg.Vectorpyspark.mllib.linalg.Vector只是Python和Java API之间的兼容性层。没有功能齐全或经过优化的线性代数实用程序,您不应这样使用它们。可用的操作不是为性能而设计的,或者只是转换为标准的NumPy数组。

与其他ml / mllib工具一起使用时,将被序列化并转换为Java等效项,因此Python表示性能几乎无关紧要。

这意味着最大的真正担忧是存储,一个简单的经验法则是:

  • 如果平均一半的条目为零,则最好使用SparseVector
  • 否则,最好使用DenseVector