如何防止pyspark将双引号添加到表名

时间:2020-10-19 13:07:49

标签: apache-spark pyspark

我有一个数据框正试图像下面这样存储到数据库中

oversampled_df.write \
    .format('jdbc') \
    .option('truncate', 'true') \
    .options(url=EXT_DB_URL,
             driver='oracle.jdbc.driver.OracleDriver',
             dbtable=DEST_DB_TBL_NAME) \
    .mode('overwrite') \
    .save()

然而,它一直在列名中添加双引号",我如何删除它以便能够从表中查询而不包括它们,即 代替

select "description" from schema.table;

成为

select description from schema.table;

2 个答案:

答案 0 :(得分:0)

我也遇到了同样的问题,我的解决方法是

  1. 在 oracle 中手动创建表
CREATE TABLE schema_name.table_name(
  table_catalog                VARCHAR2(255 BYTE),
  table_schema                 VARCHAR2(255 BYTE)
)

  1. 添加选项("truncate", "true")
oversampled_df.write.format('jdbc').options(
      url='jdbc:oracle:thin:schema/user@ip:port/dbname',
      driver='oracle.jdbc.driver.OracleDriver',
      dbtable='schema_name.table_name',
      user='user',
      password='password').option("truncate", "true")\
.mode('overwrite').save()

为我工作,希望对我有帮助

答案 1 :(得分:0)

从它的声音来看,Oracle 似乎将您的列名视为带引号的标识符来查询它,您需要它使用双引号并且它也区分大小写。我发现的一个解决方法是在保存到 Oracle 之前确保您的 DataFrame 中的所有列都大写(它们也可以有数字和下划线),以便将它们视为未加引号的标识符。它们,您应该能够以小写或大写形式查询它们,例如说明或说明,无需双引号。