본문 바로가기
Python/spark(python)

[Spark] select() 와 filter() 메서드

by ISLA! 2023. 10. 24.

 

데이터 프레임 생성하기

  • spark.createDataFrame()
dict_01 = {'Name': ['Chulmin', 'Wansoo','Myunghyun','Hyunjoo', 'Chulman'],
           'Year': [2011, 2016, 2015, 2015, 2011],
           'Gender': ['Male', 'Male', 'Male', 'Female', 'Male']
          }
# 딕셔너리를 DataFrame으로 변환
data_pdf = pd.DataFrame(dict_01)

# pandas DataFrame은 spark DataFrame으로 변환
data_sdf = spark.createDataFrame(data_pdf)

 

특정 컬럼 선택(select)하기

  • select() 로 하나 이상의 컬럼을 인자로 넣으면 데이터프레임을 반환
  • show() 를 해야 반환 결과를 볼 수 있음
data_sdf.select('Name', 'Year').show()
# 모든 컬럼 보기
data_sdf.select('*').show()

 

▶︎ (유의) 컬럼 그 자체만 호출

  • Pandas 처럼 array 까지 반환하지만, spark에서 아래와 같이 쓰면, 컬럼 값 '그 자체'만 지칭하는 것이다.
  • 따라서 특정 컬럼의 내용을 보고 싶으면 아래와 같이 select().show()와 함께 써야 한다.
# spark DataFrame의 ['column']는 컬럼 자체를 지정함. 
data_sdf.select(data_sdf.Name, data_sdf.Year).show()
data_sdf.select(data_sdf['Name'], data_sdf['Year']).show()

 

  • 아래와 같이 col() 함수를 사용해서도 컬럼을 각각 명시적으로 지정할 수도 있다.
  • 위와 동일하게 값을 제외한 컬럼 그 자체를 지칭하는 것이다.
from pyspark.sql.functions import col

# pyspark.sql.functions의 col() 함수를 이용하여 명시적으로 컬럼명을 지정할 수 있음. 
data_sdf.select(col('Name'), col('Year')).show()

 


조건으로 filter하기

  • SQL의 where와 유사하게 특정 조건을 만족하는 레코드를 dataframe으로 반환한다.
  • 사용 예시 2가지를 참고
# 이름이 김 인 사람만
data_sdf.filter(data_sdf['Name'] == 'Kim').show() 

# 이렇게도 가능(전체 조건을 SQL처럼 쓰되, ""로 묶어줌)
data_sdf.filter("Name == 'Kim'").show()
# 여러개 조건은 & 또는 | 을 사용하고, 각 조건은 ()로 묶기
data_sdf.filter( (data_sdf['Gender'] == 'Male') & (col('Year') > 2011) ).show()

 

like 조건 수행하기

# 기본 방식
data_sdf.filter(col('Name').like('KIM%')).show()
# SQL 식과 유사한 방식
data_sdf.filter(" Name like 'C%' ").show()

 

필터링 한 후 특정 컬럼만 확인하기

data_sdf.filter(upper(data_sdf['Name']).like('%M%')).select('Year', 'Gender').show()
728x90