使用 pyspark SparseVectors 解析所有零稀疏向量
Parsing all zero sparse vectors with pyspark SparseVectors
在 pyspark 中,如果我生成一个表示全零向量的稀疏向量,然后将其字符串化,它会按预期工作:
>>> res = Vectors.stringify(SparseVector(4, [], []))
'(4,[],[])'
但是解析方法无法将其加载回来:
>>> SparseVector.parse(res)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File ".../spark-1.5.2-bin-hadoop2.4/python/pyspark/mllib/linalg/__init__.py", line 545, in parse
raise ValueError("Unable to parse indices from %s." % new_s)
ValueError: Unable to parse indices from .
有谁知道解决这个问题的方法吗?
这是 SPARK-14739 描述的错误。目前最简单的解决方法是改用 ast
模块:
import ast
from pyspark.mllib.linalg import SparseVector
def parse_sparse(s):
return SparseVector(*ast.literal_eval(s.strip()))
parse_sparse("(1, [], [])")
## SparseVector(1, {})
parse_sparse("(5, [1, 3], [0.4, -0.1])")
## SparseVector(5, {1: 0.4, 3: -0.1})
在 pyspark 中,如果我生成一个表示全零向量的稀疏向量,然后将其字符串化,它会按预期工作:
>>> res = Vectors.stringify(SparseVector(4, [], []))
'(4,[],[])'
但是解析方法无法将其加载回来:
>>> SparseVector.parse(res)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File ".../spark-1.5.2-bin-hadoop2.4/python/pyspark/mllib/linalg/__init__.py", line 545, in parse
raise ValueError("Unable to parse indices from %s." % new_s)
ValueError: Unable to parse indices from .
有谁知道解决这个问题的方法吗?
这是 SPARK-14739 描述的错误。目前最简单的解决方法是改用 ast
模块:
import ast
from pyspark.mllib.linalg import SparseVector
def parse_sparse(s):
return SparseVector(*ast.literal_eval(s.strip()))
parse_sparse("(1, [], [])")
## SparseVector(1, {})
parse_sparse("(5, [1, 3], [0.4, -0.1])")
## SparseVector(5, {1: 0.4, 3: -0.1})