我正在使用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()
答案 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