如何设置CHARACTER SET以使用JDBC数据源写入MySQL表?

时间:2018-12-18 12:29:42

标签: scala apache-spark apache-spark-sql

我正在使用Spark JDBC将数据提取到Mysql表中。如果该表不存在,它也会创建一个表。许多文本都有特殊字符。如果遇到任何特殊字符,则提取失败。我通过手动将CHARACTER SET utf8设置到MySQL表中解决了这个问题。

是否可以在Spark JDBC中创建表时设置CHARACTER SET utf8

我正在使用DataFrames将数据保存到MySQL中。

df.write
  .format("jdbc")
  .option("url", "jdbc:mysql://localhost")
  .option("dbtable", "spark.tweet")
  .option("user", "root")
  .option("password", "root")
  .mode(SaveMode.Append)
  .save()

2 个答案:

答案 0 :(得分:1)

使用createTableOptions选项,例如option("createTableOptions","CHARACTER SET utf8")

引用https://spark.apache.org/docs/latest/sql-data-sources-jdbc.html

  

createTableOptions 这是一个与JDBC编写器相关的选项。如果指定,则此选项允许在创建表时设置特定于数据库的表和分区选项(例如CREATE TABLE t(名称字符串)ENGINE = InnoDB。)。此选项仅适用于写作。

答案 1 :(得分:-1)

实际上,字符集取决于您对MySQL数据库的访问权限。因此,最好的方法是在jdbc网址中设置字符集,如下所示:

jdbc:mysql://${jdbcHostname}:${jdbcPort}/${jdbcDatabase}?user=${jdbcUsername}&password=${jdbcPassword}&useUnicode=true&characterEncoding=UTF-8