DataFrame registerTempTable(註冊臨時表)後Table Not Found問題的解決

DataFrame registerTempTable(註冊臨時表)後Table Not Found問題的解決

將數據存成數據集的方式是實現數據各種操作非常有效的一種方式。也能夠迅速實現數據的導入與導出。

Spark DataFrame提供了registerTempTable這樣的接口,可以將數據對象存成臨時表,便於後續的各種查詢操作等。如select, join等。

以前都是直接從數據中讀入數據,生成一個dataframe對象,都沒有遇到 table not found的問題。然而今天用手工創建的時候,總是會報這個錯誤。

 

 

經過查資料,才發現由於自己的dataframe是用SQLContext創建的,而用HiveContext是無法訪問的。這就涉及到registerTempTable生命週期的問題,以前都沒細看,其生命週期只在所定義的sqlContext或hiveContext實例之中。換而言之,在一個sqlontext(或hiveContext)中registerTempTable的表不能在另一個sqlContext(或hiveContext)中使用。

因此,HiveContext來創建DataFrame就沒有問題。成功解決。

val spark=new HiveContext(sc)
//調用下述的方法,三張虛擬表已經駐留在內存中了,後續的程序直接使用即可
val sql1 = new HiveContext(sc)
MockData.mock(spark.sparkContext,sql1)

//測試:訪問user_visit_action虛擬表中的數據
sql1.sql("select * from product_info").show(100)

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章