이 json 파일을 하이브 테이블로 읽으려고합니다. 최상위 키 즉 1,2 .. 여기서 일관되지 않습니다.hive/sql 및 spark로 json 키 - 값 읽기
{
"1":"{\"time\":1421169633384,\"reading1\":130.875969,\"reading2\":227.138275}",
"2":"{\"time\":1421169646476,\"reading1\":131.240628,\"reading2\":226.810211}",
"position": 0
}
열은 위치를 무시하므로 내 하이브 테이블에서 시간과 판독 값 1,2 만 있으면됩니다. 하이브 쿼리와 스파크 맵 콤보 코드 조합을 수행 할 수도 있습니다. 도움 주셔서 감사합니다.
업데이트, 여기에 내가 그것은 다음과 같은 오류가 발생합니다
val hqlContext = new HiveContext(sc)
val rdd = sc.textFile(data_loc)
val json_rdd = hqlContext.jsonRDD(rdd)
json_rdd.registerTempTable("table123")
println(json_rdd.printSchema())
hqlContext.sql("SELECT json_val from table123 lateral view explode_map(json_map(*, 'int,string')) x as json_key, json_val ").foreach(println)
을 시도하고 무엇을 : 당신이 "2"(키 이름)를 "1"의 이름을 변경하고있는 경우
가Exception in thread "main" org.apache.spark.sql.hive.HiveQl$ParseException: Failed to parse: SELECT json_val from temp_hum_table lateral view explode_map(json_map(*, 'int,string')) x as json_key, json_val
at org.apache.spark.sql.hive.HiveQl$.createPlan(HiveQl.scala:239)
at org.apache.spark.sql.hive.ExtendedHiveQlParser$$anonfun$hiveQl$1.apply(ExtendedHiveQlParser.scala:50)
at org.apache.spark.sql.hive.ExtendedHiveQlParser$$anonfun$hiveQl$1.apply(ExtendedHiveQlParser.scala:49)
at scala.util.parsing.combinator.Parsers$Success.map(Parsers.scala:136)
at scala.util.parsing.combinator.Parsers$Success.map(Parsers.scala:135)
at scala.util.parsing.combinator.Parsers$Parser$$anonfun$map$1.apply(Parsers.scala:242)
at scala.util.parsing.combinator.Parsers$Parser$$anonfun$map$1.apply(Parsers.scala:242)
at scala.util.parsing.combinator.Parsers$$anon$3.apply(Parsers.scala:222)
출력이 매우 유용 할 것 같은 예제가 있습니다. – gobrewers14
출력 테이블의 예 :' "time", "reading1", "reading2"\ n 1421169633384, 130.875969, 227.138275 \ n 1421169646476, 131.240628, 226.810211' – venuktan