2017-02-15 4 views
0

私は多くの列を含むspark.ml DataFrameを持っています。これらの列には、行ごとにSparseVectorが含まれています。私はselectにそのDataFrameから列に見える、それがRDD[Vector]であることを得ることができないことを除いて...完璧なようだSpark.ml SparseVectorを含むDataFrame

def colStats(X: RDD[Vector]): MultivariateStatisticalSummary 

:私は、各列にMultivariateStatisticalSummary.colStatsを適用したい、とcolStats署名があります。

val df: DataFrame = data.select(shardId) 
val col = df.as[(org.apache.spark.mllib.linalg.Vector)].rdd 
val s: MultivariateStatisticalSummary = Statistics.colStats(col) 

(Scalaで)メッセージでコンパイルされません:私も試した

Unable to find encoder for type stored in a Dataset. Primitive types (Int, String, etc) and Product types (case classes) are supported by importing sqlContext.implicits._ Support for serializing other types will be added in future releases. 
val col = df.as[(org.apache.spark.mllib.linalg.Vector)].rdd 

:ここに私の試みでエラーが発生して、実行時に失敗し

val df = data.select(shardId) 
val col: RDD[Vector] = df.map(x => x.asInstanceOf[org.apache.spark.mllib.linalg.Vector]) 
val s: MultivariateStatisticalSummary = Statistics.colStats(col) 

java.lang.ClassCastException: org.apache.spark.sql.catalyst.expressions.GenericRowWithSchema cannot be cast to org.apache.spark.mllib.linalg.Vector 

どのようにg apはDataFramecolStatsの間ですか?

答えて

0

私はすべての後に答えが見つかりました:

val df = data.select(shardId) 
val col: RDD[Vector] = df.map { _.get(0).asInstanceOf[org.apache.spark.mllib.linalg.Vector] } 
val s: MultivariateStatisticalSummary = Statistics.colStats(col) 

トリックがそれをキャストする前に、各行の最初の要素を抽出することだけでした。

関連する問題