Scala Spark: как создать RDD из списка строк и преобразовать в DataFrame


Я хочу создать фрейм данных из списка строк, которые могли бы соответствовать существующей схеме. Вот мой код.

    val rowValues = List("ann", "f", "90", "world", "23456") // fails
    val rowValueTuple = ("ann", "f", "90", "world", "23456") //works

    val newRow = sqlContext.sparkContext.parallelize(Seq(rowValueTuple)).toDF(df.columns: _*)

    val newdf = df.unionAll(newRow).show()

Тот же код не работает, если я использую список строк. Я вижу разницу в том, что с rowValueTuple создается Tuple. Поскольку размер списка rowValues динамически изменяется, я не могу вручную создать объект Tuple*. Как я могу это сделать? Чего мне не хватает? Как я могу сгладить этот список, чтобы удовлетворить это требование?

Ценю вашу помощь, пожалуйста.

1 6

1 ответ:

DataFrame имеет схему с фиксированным числом столбцов, поэтому кажется неестественным делать строку в списке переменной длины. В любом случае, вы можете создать свой фрейм данных из RDD [Row], используя существующую схему, например:

val rdd = sqlContext.sparkContext.parallelize(Seq(rowValues))
val rowRdd = rdd.map(v => Row(v: _*))
val newRow = sqlContext.createDataFrame(rdd, df.schema)