答えは簡単です。あなたはスキーマ検出providing schema explicitly is a good ideaためのメカニズムを提供していないソースで作業する場合、正しいスキーマが一般的に
import org.apache.spark.mllib.linalg.VectorUDT
import org.apache.spark.sql.types.{LongType, StructField, StructType}
val schema = StructType(Seq(
StructField("_1", LongType, true),
StructField("_2", new VectorUDT, true)))
spark.read.schema(schema).json(path).printSchema
root
|-- _1: long (nullable = true)
|-- _2: vector (nullable = true)
spark.read.schema(schema).json(path).show(1)
// +---+-------------------+
// | _1| _2|
// +---+-------------------+
// | 1|(5,[1,3],[2.0,3.0])|
// +---+-------------------+
を提供するDataFrameReader
import org.apache.spark.mllib.linalg.VectorUDT
val path: String = ???
val df = Seq((1L, Vectors.parse("(5, [1.0, 3.0], [2.0, 3.0])"))).toDF
df.write.json(path)
spark.read.json(path).printSchema
// root
// |-- _1: long (nullable = true)
// |-- _2: struct (nullable = true)
// | |-- indices: array (nullable = true)
// | | |-- element: long (containsNull = true)
// | |-- size: long (nullable = true)
// | |-- type: long (nullable = true)
// | |-- values: array (nullable = true)
// | | |-- element: double (containsNull = true)
のためのスキーマを提供します。
JSONが厳しい要件でない場合、パーケットはベクタータイプを保持し、スキーマの発見メカニズムを提供します。
は直列化可能なベクトルですか? – Tschallacka
ベクトルの内容(サイズ、インデックス、値)は、結果のファイルで見ることができる限り正しく書き込まれますが、SparseVectorまたはVector(org.apache.spark.mllib.linalg.Vector)の記述はありません – Kai
ベクトルを拡張し、独自のプロパティを実装して、jsonにシリアライズおよびデシリアライズできるようにします。 – Tschallacka