如何将 Spark 数据帧写入 impala 数据库

Posted

技术标签:

【中文标题】如何将 Spark 数据帧写入 impala 数据库【英文标题】:How to write spark dataframe to impala database 【发布时间】:2016-08-19 13:30:29 【问题描述】:

我使用以下代码通过 JDBC 连接将 spark 数据帧写入 impala。

df.write.mode("append").jdbc(url="jdbc:impala://10.61.1.101:21050/test;auth=noSasl",table="t_author_classic_copy", pro)

但我收到以下错误:java.sql.SQLException: 找不到合适的驱动程序

然后我改变模式:

df.write.mode("overwrite").jdbc(url="jdbc:impala://10.61.1.101:21050/test;auth=noSasl",table="t_author_classic_copy", pro)

但还是报错:

CAUSED BY: Exception: Syntax error
), Query: CREATE TABLE t_author_classic_copy1 (id TEXT NOT NULL, domain_id TEXT NOT NULL, pub_num INTEGER , cited_num INTEGER , rank DOUBLE PRECISION ).

【问题讨论】:

“找不到合适的驱动程序” - 非常明确。您是否从 Cloudera 网站下载了 Impala JDBC 驱动程序,是否将其部署在运行 Spark 的机器上,是否将 JAR 添加到 Spark CLASSPATH(例如,在 spark-defaults.conf 中使用 spark.driver.extraClassPath 条目? 是的,我从Cloudera下载了驱动,它可以使用JDBC从impala读取数据。但是当我调用dataframe的writefunction时,出现了错误。 【参考方案1】:

这对我有用:

spark-shell --driver-class-path ImpalaJDBC41.jar --jars ImpalaJDBC41.jar

val jdbcURL = s"jdbc:impala://192.168.56.101:21050;AuthMech=0"

val connectionProperties = new java.util.Properties()

import org.apache.spark.sql.SaveMode

sqlContext.sql("select * from my_users").write.mode(SaveMode.Append).jdbc(jdbcURL, "users", connectionProperties)

【讨论】:

请使用正确的缩进(4 个空格)格式化您的代码 其实问题是关于一个叫df的dataframe,所以答案应该参考它来写而不是spark SQL表df.write.mode( ...

以上是关于如何将 Spark 数据帧写入 impala 数据库的主要内容,如果未能解决你的问题,请参考以下文章

PySpark:如何将具有 SparseVector 类型的列的 Spark 数据帧写入 CSV 文件?

将火花数据帧写入固定宽度文件java spark

将大型 Spark 数据帧从数据块写入 csv 失败

将 spark 数据帧写入 postgres 数据库

将 Spark 数据帧写入带分区的 CSV

将 Spark 数据帧写入带分区的 CSV