복붙노트

[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