[英]Add a row to a empty dataframe using spark scala
我正在嘗試使用 spark scala 自動化並將隨機數據加載到空數據框中
import org.apache.spark.sql.DataFrame
import org.apache.spark.sql.Row
import org.apache.spark.rdd.RDD
val df = spark.sql("select * from test.test")
val emptyDF= spark.createDataFrame(spark.sparkContext.emptyRDD[Row], df.schema)
在這里,我試圖創建一個帶有 test table schema 的空數據框。 在這種情況下,它是 (id int, name string)。 我正在嘗試向此數據框添加一個空行。
val df2=Seq((1,2)).toDF("col1","col2")
emptyDF.union(df2)
但是如果我更改表名,我必須在 Seq(data) 和 toDF(columns) 中手動執行此操作,我想更改代碼,以便可以隨機添加數據,並且架構應該從表中推斷,例如以下
val columninfo = "\""+emptyDF.columns.mkString("\",\"")+"\""
val columncount = emptyDF.columns.size
val x = (1 to columncount).toList.mkString(",")
var df1=Seq(x).toDF(columninfo)
但它不起作用,請讓我知道是否有任何其他方式將隨機數據附加到空數據幀或如何自動執行上述操作,或任何其他適合的方法。 提前致謝
您可以使用一條記錄(具有將被忽略的值)創建一個虛擬 DataFrame,然后在該 DF 上使用select
,將“空”DataFrame 的列作為列名,並使用運行整數作為列值:
import org.apache.spark.sql.functions._
import spark.implicits._
emptyDF.show()
// +----+----+
// |col1|col2|
// +----+----+
// +----+----+
List(1).toDF("dummy")
.select(emptyDF.columns.zipWithIndex.map { case (name, value) => lit(value) as name }: _*)
.show()
// +----+----+
// |col1|col2|
// +----+----+
// | 0| 1|
// +----+----+
注意:這假設emptyDF
中的所有列都是Int
類型。 如果不能支持該假設,則您需要一個更復雜的解決方案,該解決方案不僅使用emptyDf.columns
(只是名稱),而且映射到emptyDf.schema
。
至於你的嘗試:
union
- 用空的 DataFrame 執行union
是沒有意義的
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.