주제
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에서 데이터베이스 설정을 해준다.
평가 테이블과 고객 테이블의 조인 키인 "customer_id"를 사용하여 두 테이블의 데이터를 합칠 수 있다.import pyspark.sql spark = pyspark.sql.SparkSession.builder.getOrCreate() spark.read.jdbs("jdbc:postgresql://localhost:5432/pagila", "customer", properties={"user":"repl", "password":"password"}) #데이터베이스에 연결할 수 있음
- PySpark 예제
PySpark의 데이터프레임은 Pandas의 데이터프레임과 거의 같기 때문에 합치는 방법도 똑같이 사용할 수 있다.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 )
- 결합 시 주의할 점, 두 데이터프레임의 일치하는 키 설정에 주의해야한다.
Uploaded by Notion2Tistory v1.1.0