如何将 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 数据库的主要内容,如果未能解决你的问题,请参考以下文章