Exploring DataFrames Using the Apache Spark Shell
devDF = spark.read.json("/loudacre/devices.json")
Spark shell에서 다음과 같이 DataFrame으로 HDFS에 있는 JSON 파일을 읽어올 수 있습니다.
devDF.printSchema()
root
|-- dev_type: string (nullable = true)
|-- devnum: long (nullable = true)
|-- make: string (nullable = true)
|-- model: string (nullable = true)
|-- release_dt: string (nullable = true)
Spark는 Lazy하기 때문에 앞서 read.json 명령어를 실행시켰지만 실제로 아직 파일의 데이터를 읽어오지는 않았습니다. 하지만 read.json을 실행하면, 스키마를 추론하기 위해 파일을 스캔합니다.
그리고 위와 같이 printSchema()를 통해 추론된 스키마를 확인할 수 있습니다. 스키마를 보고 column 이름이 JSON 파일의 레코드 필드 이름과 일치하는지 확인합니다.
devDF.show(5)
+--------+------+--------+-----+--------------------+
|dev_type|devnum| make|model| release_dt|
+--------+------+--------+-----+--------------------+
| phone| 1|Sorrento| F00L|2008-10-21T00:00:...|
| phone| 2| Titanic| 2100|2010-04-19T00:00:...|
| phone| 3| MeeToo| 3.0|2011-02-18T00:00:...|
| phone| 4| MeeToo| 3.1|2011-09-21T00:00:...|
| phone| 5| iFruit| 1|2008-10-21T00:00:...|
+--------+------+--------+-----+--------------------+
only showing top 5 rows
show() 함수를 이용하면 DataFrame을 출력할 수 있습니다. 만약 show() 함수에 인자를 주지 않는다면 DataFrame의 첫 20 row가 출력 됩니다. 여기서는 처음 5 row를 출력하였습니다. 데이터는 스키마에 정의 된 column 이름을 사용하여 표 형식으로 출력됩니다.
devDF.select("devnum","make","model").where("make = 'Ronin'").show()
+------+-----+--------------+
|devnum| make| model|
+------+-----+--------------+
| 15|Ronin|Novelty Note 1|
| 17|Ronin|Novelty Note 3|
| 18|Ronin|Novelty Note 2|
| 19|Ronin|Novelty Note 4|
| 46|Ronin| S4|
| 47|Ronin| S1|
| 48|Ronin| S3|
| 49|Ronin| S2|
+------+-----+--------------+
쿼리에서 Transformation은 chaining을 톻해 연결할 수 있습니다. select 명령을 실행하여 select의 where 결과를 출력해줍니다.