我尝试使用 pyspark 和 jdbc 将数据插入 mariadb,但似乎 pyspark 没有生成正确的 SQL,我的 Spark 版本是 2.1.0,我没有这个问题利用集群管理器将 Spark 从 1.6.1 更新到 2.1.0,这是我的 python 代码
from pyspark.sql import Row, SparkSession as SS
if __name__ == "__main__":
spark = SS.builder.appName("boot_count").getOrCreate()
sc = spark.SparkContext
l = [(str(20160101), str(1)]
rdd = sc.parallelize(l)
rdd = rdd.map(lambda x: Row(day=x[0], count=x[1]))
df = spark.createDataFrame(rdd)
df.createOrReplaceTempView("boot_count")
mysql_url = "jdbc:mariadb://master.cluster:3306/dbname"
properties = {'user': 'root', 'driver': 'org.mariadb.jdbc.Driver'}
df.write.jdbc(url=mysql_url, table="boot_count", mode="append",
properties=properties)
这是我的错误信息
Caused by: java.sql.SQLSyntaxErrorException: (conn:364) You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '"count","day") VALUES ('1','20160101')' at line 1 Query is : INSERT INTO boot_count ("count","day") VALUES ('1','20160101')
我在MariaDB中使用命令来解决此问题。
>set global sql_mode=ANSI_QUOTES
要么在列名周围加上反引号,要么使用允许在列名两边加上双引号的设置。