bigdata/spark
[spark] pyspark datframe: filter 메서드 총 정리
jmHan
2023. 6. 9. 22:41
반응형
목차
from pyspark.sql import SparkSession
spark = SparkSession.builder.getOrCreate()
columns = ['id', 'phone_number', 'name', 'sex']
df = spark.createDataFrame([['1', "010-3333-4234", 'Jisu', 'female'], ['2', '010-9999-3231', 'Karina', 'female'], ['3', '010-6653-5888', 'Winter', 'female'], ['4', '010-7732-0029', 'Eunwoo', 'male']], columns)
df.show()
우선 실습을 진행하기 앞서 샘플 spark dataframe을 생성합니다.
1. filter the rows by condition on specific column
특정 컬럼에 조건을 걸어 행 필터링하기
from pyspark.sql.functions import col
df.filter(col('sex') == 'male').show()
df.filter(df['sex'] == 'male').show()
df.filter(df.sex == 'male').show()
# df.filter('sex' == 'male').show() # 불가능
df.filter("sex == 'male'").show()
df.filter("sex != 'female'").show()
df.filter("sex <> 'female'").show()
df.컬럼명이나 df['컬럼명']과 같은 방식으로 접근하거나 pyspark.sql.functions 모듈의 col()을 사용할 수 있습니다.
또는 sql 표현식을 사용하는 방법이 있는데 이때는 큰 따옴표(")로 filter 조건을 묶어주어야 합니다.
2. filter the rows by list values
리스트에 담겨있는 값으로 필터링 걸기
df.filter(col('name').isin(['Karina', 'Winter'])).show()
df.filter(`col('name').isin(['Karina', 'Winter'])).show()
3. filter the rows with regex
정규표현식을 사용하여 필터링하기
df.filter(col('phone_number').like('%9999%')).show()
df.filter(col('phone_number').rlike('010.9999.[0-9]')).show()
일반적인 sql like 방식으로도 필터링이 가능하지만 정규표현식을 이용해 필터링할 수 있습니다.
정규표현식을 이용할 경우에는 like가 아닌 rlike를 사용합니다.
정규표현식에 대한 이해가 필요하다면 다음 페이지를 참고해주시길 바랍니다.
반응형