我怎么知道我应该在PySpark中使用稀疏表示还是密集表示?我了解它们之间的区别(稀疏仅通过存储非零索引和值来节省内存),但是从性能角度来看,是否有任何一般的启发式方法描述何时在稀疏矢量上使用稀疏矢量?
是否有通用的“截止”维和0值的百分比,通常最好使用稀疏矢量?如果没有,我应该如何做出决定?谢谢。
答案 0 :(得分:1)
要记住的事情是pyspark.ml.linalg.Vector
和pyspark.mllib.linalg.Vector
只是Python和Java API之间的兼容性层。没有功能齐全或经过优化的线性代数实用程序,您不应这样使用它们。可用的操作不是为性能而设计的,或者只是转换为标准的NumPy数组。
与其他ml
/ mllib
工具一起使用时,将被序列化并转换为Java等效项,因此Python表示性能几乎无关紧要。
这意味着最大的真正担忧是存储,一个简单的经验法则是:
SparseVector
。DenseVector
。