Создание Spark Vector Column с помощью createDataFrame - PullRequest
0 голосов
/ 14 мая 2018

Я могу создать Spark DataFrame с векторным столбцом с помощью метода toDF.

val dataset = Seq((1.0, org.apache.spark.ml.linalg.Vectors.dense(0.0, 10.0, 0.5))).toDF("id", "userFeatures")

scala> dataset.printSchema()
root
 |-- id: double (nullable = false)
 |-- userFeatures: vector (nullable = true)


scala> dataset.schema
res5: org.apache.spark.sql.types.StructType = StructType(StructField(id,DoubleType,false), StructField(userFeatures,org.apache.spark.ml.linalg.VectorUDT@3bfc3ba7,true))

Я не уверен, как создать векторный столбец с помощью метода createDataFrame org.apache.spark.sql.types нет типа VectorType .

Это не работает:

val rows = spark.sparkContext.parallelize(
  List(
    Row(1.0, Vectors.dense(1.0, 2.0))
  )
)

val schema = List(
  StructField("id", DoubleType, true),
  StructField("features", new org.apache.spark.ml.linalg.VectorUDT, true)
)

val df = spark.createDataFrame(
  rows,
  StructType(schema)
)

df.show()
df.printSchema()

1 Ответ

0 голосов
/ 14 мая 2018

Чтобы создать векторную колонку Spark с createDataFrame, вы можете использовать следующий код:

val rows = spark.sparkContext.parallelize(
  List(
    Row(1.0, org.apache.spark.mllib.linalg.Vectors.dense(1.0, 2.0))
  )
)

val schema = List(
  StructField("id", DoubleType, true),
  StructField("features", new org.apache.spark.mllib.linalg.VectorUDT, true)
)

val df = spark.createDataFrame(
  rows,
  StructType(schema)
)

df.show()
+---+---------+
| id| features|
+---+---------+
|1.0|[1.0,2.0]|
+---+---------+

df.printSchema()
root
 |-- id: double (nullable = true)
 |-- features: vector (nullable = true)

Фактической проблемой был несовместимый тип org.apache.spark.ml.linalg.Vectors.dense, который не является допустимым внешним типом для схемы вектора. Таким образом, мы должны перейти на пакет mllib вместо пакета ml.

Надеюсь, это поможет!

Примечание : я использую Spark v2.3.0. Кроме того, класс VectorUDT в пакете linalg недоступен в пакете org.apache.spark.ml.linalg.

Для справки - https://github.com/apache/spark/tree/master/mllib/src/main/scala/org/apache/spark/mllib

...