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 ответ:
DataFrame имеет схему с фиксированным числом столбцов, поэтому кажется неестественным делать строку в списке переменной длины. В любом случае, вы можете создать свой фрейм данных из RDD [Row], используя существующую схему, например:
val rdd = sqlContext.sparkContext.parallelize(Seq(rowValues)) val rowRdd = rdd.map(v => Row(v: _*)) val newRow = sqlContext.createDataFrame(rdd, df.schema)