2017-11-27 8 views
0

私は、次のタイプのスパークデータセットを持っている:Spark Datasetをあるタイプから別のタイプにマッピングするときにエンコーダを指定する方法は?

org.apache.spark.sql.Dataset[Array[Double]] 

私はml.clustering.KMeans.fit(のための入力データセットとして使用できるようにベクトルに配列をマッピングしたいです... )。だから私はこのような何かやろう:

val featureVectors = vectors.map(r => Vectors.dense(r)) 

をしかし、これは次のエラーで失敗します。

error: Unable to find encoder for type stored in a Dataset. Primitive types (Int, String, etc) and Product types (case classes) are supported by importing spark.implicits._ Support for serializing other types will be added in future releases. 

私はマップ操作のためのエンコーダを指定する必要が推測するが、私は見つけるのに苦労しますそれを行う方法。何か案は?

答えて

1

あなたは、暗黙的な証拠として利用できるようにするエンコーダを必要とする:まで

def map[U : Encoder](func: T => U): Dataset[U] 

休憩:

def map[U](func: T => U)(implicit evidence$1: Encoder[U]): Dataset[U] 

だから、あなたがそれを渡すか、暗黙のうちに、それが利用可能にする必要があります。

しかし、私はVectorがまだサポートされていないと思うので、DataFrameにドロップする必要があるかもしれません。

+0

ええ、私は実際にはドキュメントから遠く離れています。しかし、私は実際にそれを行う方法を理解していませんでした。また、Vectorがサポートされていない場合、どのようにml.clustering.kmeans実装への入力として文書化されていますか? https://spark.apache.org/docs/2.2.0/ml-clustering.html –

関連する問題