MrG*_*rts 4 postgresql scala apache-spark apache-spark-sql
我有一个火花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
Run Code Online (Sandbox Code Playgroud)
有没有办法强制火花来尊重区分大小写?
在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
Run Code Online (Sandbox Code Playgroud)