簡體   English   中英

使用 spark scala 向空數據幀添加一行

[英]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.

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