![](/img/trans.png)
[英]How to efficiently convert ListBuffer[ListBuffer[String]] into multiple dataframes and write them using 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.