[HADOOP] 실제 데이터 대신 열 이름을 반환 - 임팔라에 대한 클라우 데라 JDBC 드라이버와 절을 가진 문제
HADOOP실제 데이터 대신 열 이름을 반환 - 임팔라에 대한 클라우 데라 JDBC 드라이버와 절을 가진 문제
나는 DataFrame을 만들 스파크 1.6.0와 임팔라 V 2.5.38을 위해 클라우 데라 JDBC 드라이버를 사용하고 있습니다. 이 절을 제외한 모든 쿼리에 대해 잘 작동하지만, 함께 광범위하게 내 조직에서 사용됩니다. 다음은 내 코드입니다.
def jdbcHDFS(url:String,sql: String):DataFrame = {
var rddDF: DataFrame = null
val jdbcURL = s"jdbc:impala://$url"
val connectionProperties = new java.util.Properties
connectionProperties.setProperty("driver","com.cloudera.impala.jdbc41.Driver")
rddDF = sqlContext.read.jdbc(jdbcURL, s"($sql) AS ST", connectionProperties)
rddDF
}
작업 및 비 작업 SQL에 대한 예를 아래
val workingSQL = "select empname from (select * from employee) as tmp"
val nonWorkingSQL = "WITH tmp as (select * from employee) select empname from tmp"
다음은 위의 SQL을위한 rddDF.first의 출력이다.
workingSQL 들어
scala> rddDF.first
res8: org.apache.spark.sql.Row = [Kushal]
nonWorkingSQL 들어
scala> rddDF.first
res8: org.apache.spark.sql.Row = [empname] //Here we are expecting actual data ie. 'Kushal' instead of column name like the output of previous query.
누군가가 그것을위한 모든 솔루션을 제안 할 수 있다면 정말 도움이 될 것입니다.
참고 : 두 쿼리는 임팔라-SHELL에서뿐만 아니라 HIVE에서와 HUE를 통해 잘 노력하고 있습니다.
최신 정보: 내가 설정 일반 JDBC 연결을 시도하고 nonWorkingSQL을 실행하고 그것은 일했다! 그럼 문제가 불꽃에 쿼리 주위에, 그러므로 나는 근본 원인을 찾기 위해 아래의 SQL을 시도했지만 여전히 근무하고 예상 된 결과를 표시되는 "이 (가) SELECT * FROM"래핑 예정이다 생각했다.
String sql = "SELECT * FROM (WITH tmp as (select * from employee) select empname from tmp) AS ST"
따라서, 근본 원인은 명확하지 않다 그것뿐만 아니라 SPARK와 함께 작동 할 수 있도록 분석 할 필요가있다. 더 제안하십시오.
해결법
from https://stackoverflow.com/questions/45593080/issue-with-with-clause-with-cloudera-jdbc-driver-for-impala-returning-column-n by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 하이브 스키마에 대한 복잡한 XML 스키마 (0) | 2019.10.03 |
---|---|
[HADOOP] Giraph 사육사 포트 문제 (0) | 2019.10.03 |
[HADOOP] 자바에서 하둡 예 JAR 파일을 실행 (0) | 2019.10.02 |
[HADOOP] NiFi에 GetFilesProcessor에서 파일을 읽는 방법 (0) | 2019.10.02 |
[HADOOP] 맵리 듀스를 배울 수있는 가장 좋은 방법은 [폐쇄] (0) | 2019.10.02 |