У меня есть spark.ml DataFrame
, который содержит много столбцов, каждый из этих столбцов содержит SparseVector
в строке. Я хотел бы применить MultivariateStatisticalSummary.colStats
к каждому колонку, и colStats
подписи:Spark.ml DataFrame, содержащий SparseVector
def colStats(X: RDD[Vector]): MultivariateStatisticalSummary
, который кажется идеальным ... за исключение того, что я не могу показаться, чтобы select
столбца из этого DataFrame
и заставить его быть RDD[Vector]
. Вот моя попытка:
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
Как скрыть г ap между DataFrame
и colStats
?