我在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
有没有办法强制火花来尊重区分大小写?
答案 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