2017-11-17 5 views
0

하이브 테이블이 있습니다. 그것은 "쿼리"로 몇 가지 하나의 열을 포함하고 거기에 4 개의 레코드가 있습니다. 하이브를 다음과 같이 읽으겠습니다 :scala_spark _dataframe_hivecontext

val query_hive=sqlContext.sql(s"select * from hive_query limit 1") 

계산을 위해 다른 하이브에서이 쿼리를 사용해야합니다.

나는이 방법을 시도했다 :

val ouput=sqlContext.sql(s"$query_hive") 

을하지만 오류를 얻고있다. 아무도 같은 솔루션을 제안 할 수 있습니까?

+0

첫 번째 쿼리의 출력은 이미'query_hive'에 저장되어 있습니다. 이를 문자열로 정의해야합니다. 강력히 권장 : https://spark.apache.org/docs/latest/sql-programming-guide.html – philantrovert

+0

예 @ philantrovert .. 나는 그것을 사용하여 문자열로 변환 : val ab = sqlContext.sql (s "select id는 hive1에서 name = 'nikhil' "). map (r => r (0) .asInstanceOf [String]) 아래 쿼리가 실패한 경우에도 발생합니다. val abc = sqlContext.sql (s "id를 hive1에서 선택하십시오. id = $ ab") –

+0

그것에 대해 알고 싶습니까? –

답변

0

이렇게 할 수 있습니다. 검색어를 올바르게 전달하지 못했습니다. 아래에서 확인하십시오.

scala> val query = "select * from src limit 1" 
query: String = select * from src limit 1 

scala> sql(s"""$query""").show 
+---+-----+ 
|key|value| 
+---+-----+ 
| 1| a| 
+---+-----+ 

감사합니다.

+0

제 경우에는 쿼리가 string.it이 아니고 query_hive : org.apache.spark.sql.DataFrame입니다. –

+0

잘못하고 있습니다. 귀하의 질의는''s "hive_query limit 1"'에서 선택하십시오. 뭐하고 있니? 질의를'sqlContext.sql'에 전달하면 DF가 반환 될 것입니다. 그래서 당신은 문자열에 쿼리를 작성해야만합니다. 그렇지 않으면 여러 번 사용할 수 있습니다. 그렇지 않으면 유스 케이스가 달라집니다. – Learner

+0

나는 내 질문을 취소 할 것이다. 나는 하이브 테이블을 쿼리 할 것이고 데이터 프레임 인 일부 값을 얻을 것이다. 이 값은 다시 다른 하이브 테이블에서 사용해야합니다. 실패했습니다. –