ошибка схемы при преобразовании векторной коллекции в фрейм данных - PullRequest
0 голосов
/ 04 января 2019

У меня есть коллекция векторов с именем values, которую я пытаюсь преобразовать в фрейм данных

scala.collection.immutable.Vector[(String, Double)] = Vector((1,1.0), (2,2.4), (3,3.7), (4,5.0), (5,4.9))

Я определил пользовательскую схему следующим образом и попытался выполнить преобразование.

val customSchema = new StructType()
    .add("A", IntegerType, true)
    .add("B", DoubleType, true)

val df = values.toDF.schema(customSchema)

Это дает мне сообщение об ошибке,

error: overloaded method value apply with alternatives:
  (fieldIndex: Int)org.apache.spark.sql.types.StructField <and>
  (names: Set[String])org.apache.spark.sql.types.StructType <and>
  (name: String)org.apache.spark.sql.types.StructField
 cannot be applied to (org.apache.spark.sql.types.StructType)

Я перепробовал все методы, описанные здесь и здесь , а также документацию StructType для создания схемы. Однако все методы приводят к одной и той же пользовательской схеме, customSchema: org.apache.spark.sql.types.StructType = StructType(StructField(A,IntegerType,true), StructField(B,DoubleType,true))

toDF метод работает просто отлично без пользовательской схемы. Однако я хочу заставить пользовательскую схему. Может кто-нибудь сказать мне, что я здесь делаю не так?

1 Ответ

0 голосов
/ 04 января 2019

schema является собственностью. Вы должны использовать схему, когда хотите получить StructType из DataFrame или Dataset.

val df = values.toDF
df.schema
//prints
StructType(StructField(_1,IntegerType,false), StructField(_2,DoubleType,false))

Чтобы преобразовать вектор в DataFrame или Dataset, вы можете использовать spark.createDataFrame или spark.createDataset. Эти методы перегружены и ожидают RDD или JavaRDD или java.util.List или Row и информации о схеме. Вы можете сделать следующее, чтобы конвертировать Vector в DataFrame:

val df = spark.createDataFrame(vec.toDF.rdd, customSchema)
df.schema
//prints
StructType(StructField(A,IntegerType,true), StructField(B,DoubleType,true))

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...