2017-01-11 2 views
-1

Env: Спарк 1.6, ScalaПроблема с испарением tempTable, таблицы не существует? как решить?

Привет
Я создал пустой dataframe [sessionTrend], и сделал unionAll с существующим dataframe [DF2, созданный из таблицы базы данных SQL Server], привело dataframe, sessionTrend работает нормально , Но после регистрации sessionTrend dataframe в качестве временной таблицы, не удалось выполнить инструкцию 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 

} 

любое предложение для решения этой проблемы? На самом деле, я пытаюсь создать dataframe, который всегда будет иметь последние 3 записи.

Благодаря
Хоссейн

+1

использовать 'sqlcontext', потому что вы создали на нем таблицу. поэтому для доступа будет 'sqlcontext.sql (« select * from memTBL »)' – mrsrinivas

+0

Спасибо @mrsrinivas. На самом деле мне нужен hivecontext. Ваше направление верно. – Jhon

ответ

-1

Поскольку ваш dataframe sessionTrend был создан из sqlContext

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

и вы пытаетесь получить доступ к временной таблицы с помощью hiveContext. Либо создайте свой фреймворк с помощью hiveContext, либо получите доступ к таблице с помощью sqlContext, как показано ниже.

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

В принципе, дело в том, что вы должны использовать один для них для операции и не смешивать его.

+0

Спасибо @ Раджат Мишра. Вы правы, мне нужно использовать hivecontext вместо sqlcontext. Он работает сейчас. – Jhon

Смежные вопросы