2016-03-29 8 views
0

私は、Python側で疎なデータを表現/構築し、そのデータをストレージに出力してからspark/scalaアプリケーションにロードする必要があるアプリケーションに取り組んでいます。クロスランゲージ(pythonとscala)の疎のデータ/ deser?

シリアライズ/デシリアライズに使用するフォーマット/ライブラリについてのご意見はありますか?

+0

Jsonは十分ではありませんか? – ipoteka

+0

libsをサポートしているjsonにスパースベクトルを保存する標準的な方法はありますか?現在、spark mllibスパースベクトルを使用することを考えていますが、シリアライズ形式を確認する必要があります。 – x89a10

答えて

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]) 

あなたはプレーンテキストを避けたい場合は、寄木細工がそのまま使用可能別のオプションです:

(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)