2017-04-15 3 views
0

나는 3 제플린 (0.6) 단락이 있습니다제플린 %의 SQL은 임시 테이블을 액세스 할 수 없습니다

para1 :

val hc = new org.apache.spark.sql.hive.HiveContext(sc) 
val df = hc.sql("SELECT * FROM tweetsORC") 
z.put("wds", df) 

para2 :

import org.apache.spark.sql.DataFrame        
import sqlContext.implicits._ 
import org.apache.spark.sql.functions._ 

val df = z.get("wds").asInstanceOf[DataFrame] 
df.select(explode($"filtered").as("value")).groupBy("value").count().sort(desc("count")).show(20, false) 
df.registerTempTable("top20") 

para3 :

%sql 
select * from top20 

을 이 경우 다음 오류가 발생합니다.

Table not found: top20 

테이블이 hivecontext의 일부이고 sql이 볼 수 없기 때문입니다. sqlcontext를 만드는 것이 문제인 비슷한 문제에 대한 해결책을 보았지만이 작업을 수행하지 않았습니다. 그럼 % SQL 단락이 임시 테이블에 액세스 할 수 있습니까? 모든 포인터 크게 감사하겠습니다. (좋은 기본 제공 그래프에 % sql을 사용하고 싶습니다.)

답변

2

인터프리터 간의 상호 운용성은 Zeppelin에서 제공 한 컨텍스트 (sqlContext)를 사용할 때만 제공됩니다. 당신은 여기에 자신의 상황을 만든 후에 :

val hc = new org.apache.spark.sql.hive.HiveContext(sc) 

%sqlTable not found에 의해 사용되는 컨텍스트에 어떤 식 으로든 연결되어 있지 않은이 예상되는 오류입니다.

해결책 : sqlContext을 사용하여 테이블을 만들고 등록하십시오.

+1

고맙습니다. 좀 더 설명해 주시겠습니까? 이것은 val df = hc.sql ("SELECT * FROM tweetsORC")을 val df = sqlContext.sql ("SELECT * FROM tweetsORC")로 변경할 수 있다는 것을 의미합니까? – schoon

+0

예, 작동합니다. 감사! – schoon