在 Spark SQL 中使用 Presto JDBC 时无法识别的连接属性“url”
Posted
技术标签:
【中文标题】在 Spark SQL 中使用 Presto JDBC 时无法识别的连接属性“url”【英文标题】:Unrecognized connection property 'url' when using Presto JDBC in Spark SQL 【发布时间】:2021-10-29 12:09:29 【问题描述】:这是我的 spark sql 代码,我正在尝试根据本指南读取 presto 表; https://spark.apache.org/docs/latest/sql-data-sources-jdbc.html
val df = spark.read
.format("jdbc")
.option("driver", "com.facebook.presto.jdbc.PrestoDriver")
.option("url", "jdbc:presto://localhost:8889/mycatalog")
.option("query", "select * from mydb.mytable limit 1")
.option("user", "myuserid")
.load()
我收到以下异常,unrecognized connection property 'url'
Exception in thread "main" java.sql.SQLException: Unrecognized connection property 'url'
at com.facebook.presto.jdbc.PrestoDriverUri.validateConnectionProperties(PrestoDriverUri.java:345)
at com.facebook.presto.jdbc.PrestoDriverUri.<init>(PrestoDriverUri.java:102)
at com.facebook.presto.jdbc.PrestoDriverUri.<init>(PrestoDriverUri.java:92)
at com.facebook.presto.jdbc.PrestoDriver.connect(PrestoDriver.java:87)
at org.apache.spark.sql.execution.datasources.jdbc.connection.BasicConnectionProvider.getConnection(BasicConnectionProvider.scala:49)
at org.apache.spark.sql.execution.datasources.jdbc.connection.ConnectionProvider$.create(ConnectionProvider.scala:68)
at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$.$anonfun$createConnectionFactory$1(JdbcUtils.scala:62)
at org.apache.spark.sql.execution.datasources.jdbc.JDBCRDD$.resolveTable(JDBCRDD.scala:56)
at org.apache.spark.sql.execution.datasources.jdbc.JDBCRelation$.getSchema(JDBCRelation.scala:226)
at org.apache.spark.sql.execution.datasources.jdbc.JdbcRelationProvider.createRelation(JdbcRelationProvider.scala:35)
at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:354)
at org.apache.spark.sql.DataFrameReader.loadV1Source(DataFrameReader.scala:326)
at org.apache.spark.sql.DataFrameReader.$anonfun$load$3(DataFrameReader.scala:308)
at scala.Option.getOrElse(Option.scala:189)
at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:308)
at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:226)
at org.apache.spark.sql.DataFrameReader.jdbc(DataFrameReader.scala:341)
似乎此问题与 https://github.com/prestodb/presto/issues/9254 相关,其中 url
属性在 Presto 中不是公认的属性,并且看起来需要在 Spark 端进行修复?这个问题还有其他解决方法吗?
PS:
Spark Version: 3.1.1
presto-jdbc version: 0.245
【问题讨论】:
【参考方案1】:spark 或 presto JDBC driver 没有问题。我认为您指定的 URL 不起作用。
您应该将其更改为以下格式。
jdbc:presto://localhost:8889/mycatalog
更新
不确定它如何与 spark 版本 another jar,其中已按照指定的 here 删除了严格的配置检查。
【讨论】:
抱歉,打错了。我已经更新了帖子。我确实给了jdbc:presto://localhost:8889/mycatalog
我在使用 presto-jdbc-0.260 的 spark 2.4.5 中没有遇到任何问题
更新了帖子。我在EMR 6.3.0
上使用spark 3.1.1
+ presto-jdbc-0.245
。另外presto-jdbc-0.260
在spark 3.1.1
上也有同样的问题
用另一个罐子试试。更新了答案。
修改后的 jar 确实有效。谢谢!虽然似乎不支持 ARRAY Exception in thread "main" java.sql.SQLException: Unsupported type ARRAYatorg.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$.getCatalystType(JdbcUtils.scala:247)
。那将是一个单独的问题。 B/w 这里是我为这个问题打开的 JIRA issues.apache.org/jira/projects/SPARK/issues/…【参考方案2】:
看起来像是 3.3 修复的火花错误
https://issues.apache.org/jira/browse/SPARK-36163
【讨论】:
以上是关于在 Spark SQL 中使用 Presto JDBC 时无法识别的连接属性“url”的主要内容,如果未能解决你的问题,请参考以下文章
SQL查询引擎对峙:Spark VS Impala VS Hive VS Presto