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