데이터 필터링
이제 기본적인 SQL 지식을 익히셨으니, Spark DataFrame에서 비슷한 작업을 어떻게 하는지 살펴보겠습니다.
.filter() 메서드를 보겠습니다. 예상하셨듯이, 이는 SQL의 WHERE 절과 대응됩니다. .filter()는 SQL 표현식의 WHERE 절에 올 수 있는 표현식을 문자열로 받거나, boolean(True/False) 값을 가진 Spark Column을 받을 수 있습니다.
예를 들어, 아래 두 표현식은 동일한 결과를 만듭니다:
flights.filter("air_time > 120").show()
flights.filter(flights.air_time > 120).show()
첫 번째 경우에는 .filter()에 문자열 을 전달합니다. SQL에서는 이 필터링 작업을 SELECT * FROM flights WHERE air_time > 120처럼 작성하겠죠. Spark의 .filter()는 문자열로 전달되는 한, SQL 쿼리의 WHERE 절에 들어갈 수 있는 어떤 표현식("air_time > 120"과 같은)도 받을 수 있습니다.
이때 문자열 안에서는 테이블 이름을 명시하지 않는다는 점도 SQL과 동일합니다.
두 번째 경우에는 .filter()에 boolean 값 컬럼 을 직접 전달합니다. flights.air_time > 120은 flights.air_time에서 120을 초과하는 레코드 위치에는 True, 그 외에는 False가 들어 있는 boolean 컬럼을 반환한다는 점을 기억하세요.
SparkSession 객체 spark와 Spark DataFrame flights는 이미 작업 공간에 준비되어 있습니다.
이 연습은 강의의 일부입니다
PySpark 기초
연습 안내
.filter()메서드를 사용해 1000마일을 초과해 비행한 항공편을 두 가지 방식으로 찾으세요.- 먼저, 거리가 1000보다 큰지 확인하는 SQL 문자열 을
.filter()에 전달하고 결과를long_flights1에 저장하세요. - 다음으로, 같은 조건을 확인하는 boolean 값 컬럼을
.filter()에 전달하고 결과를long_flights2에 저장하세요.
- 먼저, 거리가 1000보다 큰지 확인하는 SQL 문자열 을
- 두 DataFrame의 상단을
.show()로 출력해 실제로 동일한지 확인하세요!
실습형 인터랙티브 연습
이 예제를 이 샘플 코드를 완성하여 풀어보세요.
# Filter flights by passing a string
long_flights1 = ____.____("____ > ____")
# Filter flights by passing a column of boolean values
long_flights2 = ____.____(____.____ > ____)
# Print the data to check they're equal
____.____()
____.____()