scala—如何在配置单元表中只插入一些字段,重用现有的表模式?

u5i3ibmn  于 2021-06-24  发布在  Hive
关注(0)|答案(1)|浏览(263)

我已经有一个配置单元表,它是在测试之前创建的,例如它有a(字符串类型)、b(字符串)、c(数字)列。
在测试用例中,我只想插入测试数据,稍后将查询这些数据,例如在a、b列中。
将只有a列和b列数据的测试数据插入到包含diff模式的现有表中的最佳方法是什么?
我通常会得到一些类似模式不匹配的错误,列计数不匹配等错误,当我尝试做类似的事情

val df = session.createDataFrame(rows, schema)
df.write.mode(SaveMode.Append).format("orc").saveAsTable(mytableName)

哪里 schema 是现有的表架构 session.table(mytableName).schema 以及 rows 是具有列a和b的值的元组列表。
有没有合适的api来实现这一点?
如何在配置单元表中只插入一些字段,重用现有的表模式?

nbysray5

nbysray51#

向要写入表的Dataframe追加一个新列。前-
假设您有两行数据-由两个元组表示:

val rows = Seq(("1", "2"), ("3", "4"))
val df = sc.parallelize(rows).toDF("A", "B")
val newDf = df.withColumn("C", lit(null).cast(IntegerType))
// Now newDf schema will be same as your table schema
println(newDf.schema)
println(session.table(mytableName).schema) 
df.write.mode(SaveMode.Append).format("orc").saveAsTable(mytableName)

相关问题