Конвертируйте ListBuffer Dataframes в один Dataframe Spark Scala - PullRequest
1 голос
/ 29 сентября 2019

У меня есть ListBuffer из 30 DataFrames с одинаковыми полями, и я хочу «добавить» их все сразу. Какой самый лучший и самый эффективный способ?

var result_df_list = new ListBuffer[DataFrame]()

Я видел, что вы можете создать Последовательность DF следующим образом:

val newDFs = Seq(DF1,DF2,DF3)
newDFs.reduce(_ union _)

Но как этого добиться с помощью ListBuffer?

Ответы [ 3 ]

2 голосов
/ 29 сентября 2019

метод уменьшения ListBuffer работает как положено.

Запуск

val unioned = result_df_list.reduce(_ union _)
unioned.explain()

приводит к хорошему плану выполнения:

== Physical Plan ==
Union
:- LocalTableScan [value#1]
:- LocalTableScan [value#5]
+- LocalTableScan [value#9]
2 голосов
/ 29 сентября 2019

Вы также можете использовать reduce() с ListBuffer.

  import spark.implicits._

  var result_df_list = new ListBuffer[DataFrame]()

  val df1 = Seq("1").toDF("value")
  val df2 = Seq("2").toDF("value")
  val df3 = Seq("3").toDF("value")

  result_df_list += df1
  result_df_list += df2
  result_df_list += df3

  val df_united: DataFrame = result_df_list.reduce(_ unionByName _)

  df_united.show()

Результат:

+-----+
|value|
+-----+
|    1|
|    2|
|    3|
+-----+
0 голосов
/ 29 сентября 2019

Вы можете попробовать преобразовать буфер списка в список, вызвав метод toList в списке буферов, а затем вы можете использовать метод Reduce.

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