2017-11-08 1 views
-2
OS X El Capitan 10.11.6 
Spark 2.2.0 
Scala 2.11.8 

Spark에서 읽으려고하는 특정 JSON 파일은 here입니다.Spark Scala 하나의 열로 JSON 읽기

val test = spark.read.format("json").load("Downloads/yql.json") 
test.show() 

+--------------------+ 
|    query| 
+--------------------+ 
|[1,2017-11-08T12:...| 
+--------------------+ 

그러나 test.printSchema()를 실행하면 적절하게 중첩 된 JSON 형식의 스키마를 반환 : 나는 아래의 코드를 사용하면

, 그것은 모두 함께 열 값 모습의 하나의 열 출력을 제공합니다.

JSON 파일이 여러 열이있는 DataFrame으로 변환되도록이 파일을 Spark로 읽는 방법은 무엇입니까?

답변

0

내 문제는 중첩 된 배열에서 필드를 추출하는 방법에 대한 요구 사항을 이해하지 못했습니다 (둘 다 Ar ray 및 Struct). 물론이 질문을 게시 한 후 많은 도움이 된 this post을 발견했습니다.

val test = spark.read.format("json").load("Downloads/yql.json") 

val testFinal = test. 
    select(
     "query.created", 
     "query.results.channel.item.lat", 
     "query.results.channel.item.long", 
     "query.results.channel.units.temperature", 
     "query.results.channel.item.forecast"). 
    withColumn("forecast_explode", explode($"forecast")). 
    withColumn("date", $"forecast_explode.date"). 
    withColumn("forecast_high", $"forecast_explode.high"). 
    withColumn("forecast_low", $"forecast_explode.low"). 
    drop($"forecast"). 
    drop($"forecast_explode") 

testFinal.show() 

+--------------------+--------+----------+-----------+-----------+-------------+------------+ 
|    created|  lat|  long|temperature|  date|forecast_high|forecast_low| 
+--------------------+--------+----------+-----------+-----------+-------------+------------+ 
|2017-11-08T14:57:15Z|40.71455|-74.007118|   F|08 Nov 2017|   48|   39| 
|2017-11-08T14:57:15Z|40.71455|-74.007118|   F|09 Nov 2017|   52|   39| 
|2017-11-08T14:57:15Z|40.71455|-74.007118|   F|10 Nov 2017|   47|   27| 
|2017-11-08T14:57:15Z|40.71455|-74.007118|   F|11 Nov 2017|   40|   25| 
|2017-11-08T14:57:15Z|40.71455|-74.007118|   F|12 Nov 2017|   48|   33| 
|2017-11-08T14:57:15Z|40.71455|-74.007118|   F|13 Nov 2017|   51|   45| 
|2017-11-08T14:57:15Z|40.71455|-74.007118|   F|14 Nov 2017|   53|   43| 
|2017-11-08T14:57:15Z|40.71455|-74.007118|   F|15 Nov 2017|   52|   39| 
|2017-11-08T14:57:15Z|40.71455|-74.007118|   F|16 Nov 2017|   54|   43| 
|2017-11-08T14:57:15Z|40.71455|-74.007118|   F|17 Nov 2017|   54|   44| 
+--------------------+--------+----------+-----------+-----------+-------------+------------+ 
: 여기

내가 질문에 포함 된 데이터 소스에서 DataFrame에서 10 일간의 일기 예보를 볼 수있는 방법의 예입니다
0

것은 사용하여 JSON 데이터의 스키마를 가져 오기 :

val dataDF = spark.read.option("samplingRatio", "1.0").json("test.json") 

사용을 스키마를 JSON 파일 읽는 동안 적용하기위한 : 이제

val test =spark.read.schema(dataDF.schema).json("test.json") 

을, 당신은 JSON의 특정 컬럼을 조회하는 데 사용할 수 있습니다 :

test.select($"query.lang").show 
+-----+ 
| lang| 
+-----+ 
|en-us| 
+-----+