跨语言(python到scala)稀疏数据ser / deser?

时间:2016-03-29 19:23:05

标签: json scala serialization apache-spark pyspark

我正在开发一个应用程序,我需要在python端表示/构造稀疏数据,将数据输出到存储,然后加载到spark / scala应用程序中。

关于我应该使用什么格式/库进行序列化/反序列化的任何建议?

1 个答案:

答案 0 :(得分:1)

好吧,mllib.Vectors已经提供了有意义的字符串表示和fromString方法:

from pyspark.mllib.linalg import Vectors, SparseVector

v = SparseVector(5, [0, 3], [1.0, -1.0])
str(v)

## '(5,[0,3],[1.0,-1.0])'

assert Vectors.parse(str(v)) == v
import org.apache.spark.mllib.linalg.{Vectors, Vector}

Vectors.parse("(5,[0,3],[1.0,-1.0])")
// org.apache.spark.mllib.linalg.Vector = (5,[0,3],[1.0,-1.0])

如果你想避免使用纯文本,那么Parquet是开箱即用的另一种选择:

(sc.parallelize([(SparseVector(5, [0, 3], [1.0, -1.0]), )])
  .toDF()
  .write
  .parquet("/tmp/foo"))
val df = sqlContext.read.parquet("/tmp/foo")
df.printSchema()
// root
// |-- _1: vector (nullable = true)