在此处使用Scala:
Val df = spark.read.format("jdbc").
option("url", "<host url>").
option("dbtable", "UPPERCASE_SCHEMA.table_name").
option("user", "postgres").
option("password", "<password>").
option("numPartitions", 50).
option("fetchsize", 20).
load()
我使用上面的代码调用的数据库有很多模式,它们都是大写字母(uppercase_SCHEMA(。
无论我如何表示模式是全大写的,Spark都会将其转换为小写,从而无法使用实际的DB进行初始化。
我尝试过将它作为一个变量,并在多种语言中明确表示它都是大写的,等等,但没有成功。
有人知道变通办法吗?
当我进入实际的DB(Postgres(并暂时将模式更改为全小写时,它运行得非常好。
尝试将spark.sql.caseSensitive
设置为true
(默认为false
(
spark.conf.set('spark.sql.caseSensitive', true)
您可以在源代码中看到它的定义:https://github.com/apache/spark/blob/master/sql/catalyst/src/main/scala/org/apache/spark/sql/internal/SQLConf.scala#L833
此外,您可以在JDBCWriteSuite
中看到它如何影响JDBC连接器:https://github.com/apache/spark/blob/ee95ec35b4f711fada4b62bc27281252850bb475/sql/core/src/test/scala/org/apache/spark/sql/jdbc/JDBCWriteSuite.scala