Python Pyspark中SparseVector到DenseVector的转换
在PySpark 1.4.1中将SparseVector转换为DenseVector时出现意外错误:Python Pyspark中SparseVector到DenseVector的转换,python,numpy,apache-spark,pyspark,Python,Numpy,Apache Spark,Pyspark,在PySpark 1.4.1中将SparseVector转换为DenseVector时出现意外错误: from pyspark.mllib.linalg import SparseVector, DenseVector DenseVector(SparseVector(5, {4: 1.})) 这在Ubuntu上正常运行,运行pyspark,返回: DenseVector([0.0,0.0,0.0,0.0,1.0]) 这导致RedHat运行pyspark时出错,返回: 回溯(最近一次调用):
from pyspark.mllib.linalg import SparseVector, DenseVector
DenseVector(SparseVector(5, {4: 1.}))
这在Ubuntu上正常运行,运行pyspark,返回:
DenseVector([0.0,0.0,0.0,0.0,1.0])
这导致RedHat运行pyspark时出错,返回:
回溯(最近一次调用):文件“”,第1行,在
文件“/usr/lib/spark/python/pyspark/mllib/linalg.py”,第行
206,在init中
ar=np.array(ar,dtype=np.float64)文件“/usr/lib/spark/python/pyspark/mllib/linalg.py”,第673行,在
getitem
raise VALUERROR(“索引%d超出范围”。%Index)VALUERROR:索引5超出范围
此外,在这两个平台上,评估以下内容也会导致错误:
DenseVector(SparseVector(5, {0: 1.}))
我希望:
DenseVector([1.0,0.0,0.0,0.0,0.0])
但是你可以得到:
- Ubuntu:
- RedHat:相同的命令会导致分段错误,从而导致Spark崩溃
SparseVectors
。请参阅:
火花<2.0.2
第一个案例很有趣,但总体行为看起来一点也不像一个bug。如果查看DenseVector
构造函数,它只考虑两种情况
ar
是一个对象(范围为0的整数的不可变序列)。对于第一个问题,我想知道他在两台机器上是否有相同的spark版本和python版本。谢谢@Paul。我发布了一篇编辑文章,部分解释了这里发生的事情。