python - 使用 pyspark SparseVectors 解析所有零稀疏向量

标签 python serialization apache-spark pyspark sparse-matrix

在 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})

关于python - 使用 pyspark SparseVectors 解析所有零稀疏向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36730727/

相关文章:

c - 使用 OPENSSL 签名的结构序列化

python - 从列表创建 DataFrame

apache-spark - 在 Spark 与 Redshift 上执行查询

java - python 中的索引错误

python - 阻止小部件相互重叠并在它们之间添加空间

网络上的 Java 序列化

c# - Serialization 中传递的数据是什么? (二进制序列化)

python - 删除qt中gui的顶部栏

python - Django 500 内部服务器错误 - 配置不当 : Error loading MySQLdb module:

apache-spark - Spark作业可在两个不同的HDFS环境中工作