写入 Impala 时自动创建 Impala 表的数据框

Posted

技术标签:

【中文标题】写入 Impala 时自动创建 Impala 表的数据框【英文标题】:Dataframe to automatically create Impala table when writing to Impala 【发布时间】:2018-06-22 14:49:00 【问题描述】:

我想知道 Spark Dataframe 保存是否有任何功能,当它将数据写入 Impala 表时,它也会创建该表,而该表以前未在 Impala 中创建。

例如代码:

myDataframe.write.mode(SaveMode.Overwrite).jdbc(jdbcURL, "books", connectionProperties)

如果表不存在,应该创建它。

表架构应根据数据框架构确定。

期待您的建议/想法。

问候, 弗洛林

【问题讨论】:

可能是按照SO的协议看的思路 【参考方案1】:
import org.apache.spark.sql.SaveMode

val jdbcURL = s"jdbc:impala://192.168.10.555:21050;AuthMech=0"
val connectionProperties = new java.util.Properties()
sqlContext.sql("select * from temp_table").write.mode(SaveMode.Append).jdbc(jdbcURL, "users", connectionProperties)

或者

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

使用命令传递驱动程序 jar

spark-shell --driver-class-path

【讨论】:

感谢您的回答。表“users”和“tempTables”以前是在 Impala 中创建的?或者它们是由 Spark 立即创建的?您正在测试什么版本的 Spark 和 Impala? 我想知道这一点,并且我相信我的回答是正确的。如果没有,那我就吃掉我的帽子。 可能我必须这样做【参考方案2】:

我过去通过 mutateStatement.execute 和相关的 DDL 创建了表。我检查了 SPARK 2.x,并且 append 也自动创建了它。 Sp append 就是你所需要的。

对于 JDBC:

jdbcDF.write.mode("append").jdbc(url, table, prop) 

对于通过 SPARK 2.x 自动配置单元上下文的 Hive:

x.write.mode("append").saveAsTable("a_hive_table_xx") 

【讨论】:

以上是关于写入 Impala 时自动创建 Impala 表的数据框的主要内容,如果未能解决你的问题,请参考以下文章

将数据加载到 Hive/Impala

Apache Impala(五) Impala数据导入方式

将 pandas 表写入 impala

Impala:列出数据库中的所有表及其创建日期

插入 Impala 表与写入 HDFS

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