KEEP GOING

[spark] pyspark datframe: filter 메서드 총 정리 본문

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를 사용합니다.   

    정규표현식에 대한 이해가 필요하다면 다음 페이지를 참고해주시길 바랍니다.

    https://dogsavestheworld.tistory.com/entry/python-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%A0%95%EA%B7%9C%ED%91%9C%ED%98%84%EC%8B%9Dregex-%EC%82%AC%EC%9A%A9%EB%B2%95-%EC%A0%95%EB%A6%AC-%EB%B0%8F-%EC%97%B0%EC%8A%B5-%EC%82%AC%EC%9D%B4%ED%8A%B8-%EC%B6%94%EC%B2%9C

     

    [python] 파이썬 정규표현식(regex) 사용법([], ^, |, +, ?, ., *, $) 정리 및 연습 사이트 추천

    목차 1. 정규 표현식 [0-9]: 숫자 [a-z]: 영어 소문자 [A-Z]: 영어 대문자 ^: not |: or ?:하나 혹은 아예 없음(1개 또는 0개) *:없거나 하나 이상 있는 경우(0개 또는 1개 이상) +:하나 이상 있는 경우(1개 이상

    dogsavestheworld.tistory.com

     

    반응형
    Comments