2017-01-11 11 views
-1

ENV:私は[sessionTrend]空のデータフレームを作成し、既存のデータフレーム[SQL Serverデータベースのテーブルから作成DF2、]でunionAllをやっている1.6、Scalaのspark tempTableの問題、テーブルが存在しません?の解き方?

こんにちは
スパーク、データフレームをもたらし、sessionTrendが正常に動作しています。しかし、sessionTrendデータフレームを一時テーブルとして登録した後、エラーテーブルのためにselectステートメントを実行できません。

val schemaRDD = StructType(
    StructField("SessionCount", IntegerType, true) :: 
    StructField("SampleTime", TimestampType, false) :: 
    StructField("Program_ID", IntegerType, true) :: Nil) 

    var sessionTrend = sqlcontext.createDataFrame(sc.emptyRDD[Row], schemaRDD) 

val run_id_q= new Queue[Int] 


for (i <- 1 to 10) 
{ 
    run_id_q += i 
    sessionTrend = sessionTrend.unionAll(DF2) // DF2 is a data set with same schema as sessionTrend 
    if (run_id_q.length >=3) { 
     v_run_id = run_id_q.dequeue() 
      sessionTrend = sessionTrend.filter(sessionTrend("run_id")>v_run_id) 

    } 

sessionTrend.show() // working fine and displaying expected result 
sessionTrend.registerTempTable("memTBL") 
val myData= hivecontext.sql("select * from memTBL") // ERROR: Table memTBL does not exit 

} 

この問題を解決するための提案はありますか?実際には、私は常に最新の3つのレコードを持つデータフレームを作成しようとしています。

おかげ
ホサイン

+1

'sqlcontext'は、テーブルを作成したために使用します。アクセスは 'sqlcontext.sql(" select * from memTBL ")' – mrsrinivas

+0

ありがとう@mrsrinivasです。実際には、私はhivecontextが必要です。あなたの方向は正しい。 – Jhon

答えて

-1

あなたのデータフレームsessionTrendhiveContextを使用して一時テーブルにアクセスしようとしsqlContext

var sessionTrend = sqlcontext.createDataFrame(sc.emptyRDD[Row], schemaRDD) 

とあなたから作成されたので。 hiveContextを使用してデータフレームを作成するか、次のようにsqlContextを使用してテーブルにアクセスします。

val myData= sqlContext.sql("select * from memTBL") 

基本的には、操作のためにどちらか一方を使用し、混在しないようにする必要があります。

+0

ありがとう@Rajat Mishra。あなたは正しいです、私はsqlcontextの代わりにhivecontextを使う必要があります。それは今働いている。 – Jhon

関連する問題