apache-spark - 从JDBC创建spark数据帧时如何指定sql方言?

标签 apache-spark jdbc apache-spark-sql apache-spark-2.0 vitess

我在使用 Spark 通过自定义 JDBC 读取数据时遇到问题。我将如何覆盖通过 jdbc url 推断的 sql 方言?

有问题的数据库是 vitess ( https://github.com/youtube/vitess ),它运行一个 mysql 变体,所以我想指定一个 mysql 方言。
jdbc url 以 jdbc:vitess/开头

否则 DataFrameReader 会推断默认方言使用 """作为引用标识符。因此,通过 spark.read.jdbc 的查询被发送为

Select 'id', 'col2', col3', 'etc' from table



它选择字符串表示而不是列值
代替

Select id, col2, col3, etc from table

最佳答案

也许为时已晚。但接下来的答案将是:

创建您的自定义方言,就像我为 ClickHouse 数据库所做的一样(我的 jdbc 连接 url 看起来像这样 jdbc:clickhouse://localhost:8123)

 private object ClickHouseDialect extends JdbcDialect {
    //override here quoting logic as you wish
    override def quoteIdentifier(colName: String): String = colName

    override def canHandle(url: String): Boolean = url.startsWith("jdbc:clickhouse")
  }

并在您的代码中的某处注册它,如下所示:
JdbcDialects.registerDialect(ClickHouseDialect)

关于apache-spark - 从JDBC创建spark数据帧时如何指定sql方言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40371433/

相关文章:

java - 在准备好的语句中输入一组数字

java - 如何将 Java 桌面应用程序连接到在线数据库

python - 基于 Spark Dataframe 中不同值的类别列

apache-spark - 数据帧上的两个后续 show() 导致结果不一致

mongodb - 如何使用 mongo-spark 连接器添加特定于 MongoDB 的查询?

apache-spark - 来自 IBM MQ 的 Spark 流数据

scala - 在 Scala Spark 中的列上使用指数如何使其工作

PostgreSQL "Protocol error. Session setup failed.."错误

java - 使用 Spark Submit 运行 Spark 应用程序

apache-spark - 有什么方法可以将 Spark 的 Dataset.show() 方法的输出作为字符串获取吗?