如果 Dataframe 具有不同的模式,则使用附加模式的 Spark JDBC Oracle 写入也会更改表模式

Posted

技术标签:

【中文标题】如果 Dataframe 具有不同的模式,则使用附加模式的 Spark JDBC Oracle 写入也会更改表模式【英文标题】:Spark JDBC Oracle write using Append mode also changing the table schema if Dataframe has different schema 【发布时间】:2019-08-29 09:29:09 【问题描述】:

如果 Dataframe 具有不同的架构,则使用附加模式的 Spark JDBC Oracle 写入也会更改表架构。 是否有任何选项可以防止 spark 在追加时更改 oracle 元数据?

【问题讨论】:

如果输出的数据不同怎么办? @Murali- 你写得怎么样?你能显示代码吗? 额外的列或数据类型? blog.kprajapati.com/… 【参考方案1】:

根据spark sql数据源官方文档,见https://spark.apache.org/docs/latest/sql-data-sources-jdbc.html

您可以使用 createTableColumnTypes :创建表时要使用的数据库列数据类型,而不是默认值。数据类型信息应以与 CREATE TABLE 列语法相同的格式指定(例如:“name CHAR(64), cmets VARCHAR(1024)”)。指定的类型应该是有效的 spark sql 数据类型。此选项仅适用于写作。

// Specifying create table column data types on write
jdbcDF.write
  .option("createTableColumnTypes", "name CHAR(64), comments VARCHAR(1024)")
  .jdbc("jdbc:postgresql:dbserver", "schema.tablename", connectionProperties)

例如,它使用 postgresql 但您可以使用 oracle jdbc driver 。

【讨论】:

以上是关于如果 Dataframe 具有不同的模式,则使用附加模式的 Spark JDBC Oracle 写入也会更改表模式的主要内容,如果未能解决你的问题,请参考以下文章

具有不同开始日期的数据时间序列图

联合两个具有嵌套不同模式的数据框

Pyspark RDD 到具有强制模式的 DataFrame:值错误

软件设计模式七大原则的含义附举例说明

如果另一个Dataframe值小于0,则替换R数据框中的值

为啥在具有一级索引的 MultiIndex 列的 pandas DataFrame 中表现不同?