我需要从Spark的Postgres数据库获取一些数据。因为SQL查询很大(接近300行),所以我想从sql文件中读取查询,而不是在Scala源代码中对其进行硬编码。
但是,我无法以保留语法的方式正确读取sql文件。我可以在DBeaver中很好地运行查询,但是Scala会抛出org.postgresql.util.PSQLException。典型的堆栈跟踪将指向SQL文件中看似随机的位置,但不提供任何提示。
我正在读取这样的SQL文件:
val query = sc.textfile("someQuery.sql").collect().mkString("\n")
哪个给出的字符串看起来像原始的sql查询。然后我运行时将抛出Postgres异常
spark.read.jdbc(DBUrl, query, connectionProperties)
修改
稍作修改后,给定here的解决方案对我有用。
可能需要关注的一些笔记:
此代码段最终为我工作:
val df = spark
.read.format("jdbc")
.options(
Map("url" -> jdbcUrl,
"dbtable" -> aliased_query,
"Driver" -> "org.postgresql.Driver",
"user" -> <user>,
"password" -> <password>)
).load()
(我知道,请不要对密码进行硬编码。)