Я использую Spark JDBC для ввода данных в таблицу Mysql. Он также создает таблицу, если таблица не существует. Многие тексты содержат специальные символы. Поглощение не удается, если встречаются какие-либо специальные символы. Я решил эту проблему, установив вручную CHARACTER SET utf8 в таблицу MySQL.
Можно ли установить CHARACTER SET utf8
во время создания таблицы в Spark JDBC?
Я использую 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()
Фактически кодировка определяется вашим доступом к базе данных MySQL. Итак, лучший способ - установить кодировку в URL-адресе jdbc следующим образом:
jdbc:mysql://${jdbcHostname}:${jdbcPort}/${jdbcDatabase}?user=${jdbcUsername}&password=${jdbcPassword}&useUnicode=true&characterEncoding=UTF-8
Используйте опцию createTableOptions
, например option("createTableOptions","CHARACTER SET utf8")
.
Цитата https://spark.apache.org/docs/latest/sql-data-sources-jdbc.html:
createTableOptions This is a JDBC writer related option. If specified, this option allows setting of database-specific table and partition options when creating a table (e.g., CREATE TABLE t (name string) ENGINE=InnoDB.). This option applies only to writing.
Вы умеете ставить SET NAMES utf8mb4
, спасибо.
@roamer Понятия не имею, но начну с этой опции createTableOptions
. Ты пробовал это?
Уже пробовал. Он не создаст таблицу с CHARACTER SET utf8.