Spark不尊重表格的区分大小写

时间:2018-01-26 13:22:20

标签: postgresql scala apache-spark apache-spark-sql

我在spark scala中遇到区分大小写的问题。 我想从postgres表中读取,其中包含一些(大写)字符,但默认情况下spark将名称转换为小写,我收到错误

  

org.postgresql.util.PSQLException:错误:关系“textlogs”不存在

val opts = Map(
  "url" -> "jdbc:postgresql://localhost:5433/sparkdb",
  "dbtable" -> "TextLogs",
  "user" -> "admin",
  "password" -> "mypassword"
)
val df = spark
           .read
           .format("jdbc")
           .options(opts)
           .load

有没有办法强制火花来尊重区分大小写?

1 个答案:

答案 0 :(得分:7)

在Postgres中,当您不引用双引号对象标识符(如表名)时,它们将被视为不区分大小写。因此,此TextLogs实际上等于textlogs

为了拥有区分大小写的对象标识符,您需要双引号。在您的情况下,那将是"TextLogs",因此在您的代码中,您应该只将转义的双引号添加到表名:

val opts = Map(
  "url" -> "jdbc:postgresql://localhost:5433/sparkdb",
  "dbtable" -> "\"TextLogs\"",
  "user" -> "admin",
  "password" -> "mypassword"
)
val df = spark
           .read
           .format("jdbc")
           .options(opts)
           .load