簡體   English   中英

將數據幀的 ListBuffer 轉換為單個 Dataframe Spark Scala

[英]Convert ListBuffer of Dataframes into one single Dataframe Spark Scala

我有一個包含 30 個具有相同字段的 DataFrame 的 ListBuffer,我想一次將它們全部“附加”。 最好的方法和最有效的方法是什么?

var result_df_list = new ListBuffer[DataFrame]()

我已經看到您可以像這樣創建一個 DF 序列:

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

但是如何使用 ListBuffer 實現這一點呢?

ListBuffer 的 reduce 方法按預期工作。

跑步

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

產生一個好看的執行計划:

== Physical Plan ==
Union
:- LocalTableScan [value#1]
:- LocalTableScan [value#5]
+- LocalTableScan [value#9]

您還可以將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|
+-----+

您可以使用 MutableList 和在可變列表中的 toDF 方法可以用於將 object 轉換為 DataFrame 或 DataSet

您可以嘗試通過在列表緩沖區上調用 toList 方法將列表緩沖區轉換為列表,然后您可以使用 reduce 方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM