린아저씨의 잡학사전

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 결과를 출력해줍니다.

공유하기

facebook twitter kakaoTalk kakaostory naver band