앎을 경계하기

[가짜연구소3기] Data Engineer

[가짜연구소 3기] 데이터 엔지니어링 - 19 Transform

양갱맨 2021. 8. 25. 18:29

주제

ETL의 두번째 단계 Transform에 대해 배웠다.


변환 작업의 종류

 

하나의 레코드가 있다.

데이터 엔지니어가 할 수 있는 변환 작업의 예시를 들면,

  • 속성 선택하기 (ex: email)
  • 코드 변환하기 (ex: New York → NY)
  • 데이터 유효성 검증 (ex: created_at 속성의 날짜 값이 포함되지 않는 경우 데이터 삭제)
  • 여러 개의 컬럼으로 나누기 (ex: email 데이터의 username부분과 domain 부분으로 나눌 수 있음)
    • 이 작업은 Pandas 라이브러리로 쉽게 적용 가능하다.
    customer_df
    
    split_email = customer_df.email.str.split('@', expand=True)
    
    customer_df = customer_df.assign(
    							username = split_email[0],
    							domain=split_email[1])
  • 여러 개의 소스로부터 합치기
    • 부하가 적으면 pandas를 사용할 수 있지만 그게 아니면 PySpark를 사용할 수 있다.
    • 여러 소스를 결합하기 위해 먼저 spark에서 데이터베이스 설정을 해준다.
    import pyspark.sql
    
    spark = pyspark.sql.SparkSession.builder.getOrCreate() 
    
    spark.read.jdbs("jdbc:postgresql://localhost:5432/pagila",
    								"customer",
    								properties={"user":"repl", "password":"password"}) #데이터베이스에 연결할 수 있음
    평가 테이블과 고객 테이블의 조인 키인 "customer_id"를 사용하여 두 테이블의 데이터를 합칠 수 있다.
    • PySpark 예제
    customer_df
    ratings_df
    
    ratings_per_customer = ratings_df.groupBy("customer_id").mean("rating")
    
    customer_df.join(
    	raings_per_customer,
    	customer_df.customer_id == ratings_per_customer.customer_id
    )
    PySpark의 데이터프레임은 Pandas의 데이터프레임과 거의 같기 때문에 합치는 방법도 똑같이 사용할 수 있다.
  • 결합 시 주의할 점, 두 데이터프레임의 일치하는 키 설정에 주의해야한다.