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