我正在处理一个简单的Spark脚本,并在将数据放在我想要的地方以及使工作正常工作时遇到问题。 具体来说,我需要在将数据框注册到临时表时指定表的数据库。
df_del_records,df_add_records,df_exclusion_records=get_new_records(dff)
df_del_records.registerTempTable("db.update_deletes_temp_table")
df_add_records.registerTempTable("db.update_adds_temp_table")
df_exclusion_records.registerTempTable("db.exclusions_temp_table")
sqlContext.sql("insert overwrite table db.automated_quantity_updates select * from db.update_deletes_temp_table")
sqlContext.sql("insert into table db.automated_quantity_updates select * from db.update_adds_temp_table")
sqlContext.sql("insert into table db.exclusions select * from db.exclusions_temp_table")
上面的代码运行没有错误,但不产生任何结果。 删除数据库会产生结果,但这在生产中不起作用,其中必须存储临时表的数据库不是默认 Spark 使用的任何数据库。 如何在 Spark 1.6 中指定临时表在将数据 grame 注册到临时表时需要位于哪个数据库?
由registerTempTable
或createOrReplaceTempView
创建的临时表/视图与任何数据库无关。它只是根据数据帧的创建方式创建具有查询计划的数据帧视图。
来自Apache Spark的Dataset.scala
本地临时视图是会话范围的。它的生存期是创建它的会话的生存期,即当会话终止时,它将自动删除。它不绑定到任何数据库,即我们不能使用
db1.view1
来引用本地临时视图。
强调由我添加。