Вы путаете две разные вещи:
- Тип схемы и внешний тип столбца - в данном случае
org.apache.spark.ml.linalg.SQLDataTypes.VectorType
и org.apache.spark.ml.linalg.Vector
соответственно. - Внутреннее представление
UserDefinedType
(его sqlType
).
Внутренние атрибуты UserDefinedType
, как правило, недоступны .
Возможно, вы сможете получить доступ к внутренней структуре, используя трюк to_json
- from_json
, аналогично тому, что показано здесь ,
import org.apache.spark.sql.types._
val schema = StructType(Seq(StructField(
"features",
StructType(Seq(
StructField("indices", ArrayType(LongType, true), true),
StructField("size", LongType, true),
StructField("type", ShortType, true),
StructField("values", ArrayType(DoubleType, true), true)
)), true)))
df.select(
from_json(
to_json(struct($"features")), schema
).getItem("features").alias("data")
)
, но с учетом того, что
Я пытаюсь перевести его в RDD для моего LDA.
это просто пустая трата времени.Если вы используете Datasets
, используйте новый o.a.s.ml
API, который уже обеспечивает реализацию LDA.Пожалуйста, следуйте примерам в официальной документации для получения подробной информации - Латентное распределение Дирихле (LDA)