분류 전체보기

데이터 엔지니어링/Spark

21. Hive 메타스토어 사용하기

Spark 데이터베이스와 테이블(1) 카탈로그 : 테이블과 뷰에 관한 메타 데이터 관리 기본으로 메모리 기반 카탈로그 제공 - 세션이 끝나면 사라짐 Hive와 호환되는 카탈로그 제공 - Persistent 테이블 관리 방식 데이터들은 데이터베이스라 부르는 폴더와 같은 구조로 관리(2단계) Spark 데이터베이스와 테이블(2) 메모리 기반 테이블/뷰: 임시 테이블로 앞서 사용해봤음 스토리지 기반 테이블 기본적으로 HDFS와 Parquet 포맷을 사용 Hive와 호환되는 메타스토어 사용 두 종류의 테이블이 존재(Hive와 동일한 개념) Managed Table Spark이 실제 데이터와 메타 데이터 모두 관리 Drop 테이블 하면 실제 HDFS에서 삭제 Unmanaged (External) Table Spa..

데이터 엔지니어링/Spark

20. SPARK SQL(Windowing)

사용자별로 처음 채널과 마지막 채널 알아내기 user_session_channel, session_timestamp 테이블 사용 다음 형태의 결과를 만들어보기 사용자 251번의 시간 순으로 봤을 때 첫번째 채널과 마지막 채널은 무엇인가? 노가다를 하자면 아래 쿼리를 실행해서 처음과 마지막 채널을 보면 된다. SELECT ts, channel FROM user_session_channel usc JOIN session_timestamp st ON usc.sessionid = st.sessionid WHERE userid = 251 ORDER BY 1 ROW_NUMBER를 이용해서 해보자 ROW_NUMBER () OVER (PARTITION BY field1 ORDER BY field2) nn vs. FIR..

데이터 엔지니어링/Spark

19. SPARK SQL(Redshift Connect, Grouping)

월별 채널별 매출과 방문자 정보 계산하기 user_session_channel, session_timestamp, session_transaction 테이블 사용 다음 형태의 결과를 만들어보기 1. Spark Session Build from pyspark.sql import SparkSession spark = SparkSession \ .builder \ .appName("Python Spark SQL #1") \ .config("spark.jars", "/usr/local/lib/python3.8/dist-packages/pyspark/jars/RedshiftJDBC42-no-awssdk-1.2.20.1043.jar") \ .getOrCreate() 2. Redshift Connect # Redsh..

데이터 엔지니어링/Spark

18. SparkSQL(Redshift Connect, Ranking)

매출 사용자 10명 알아내기(RANKING) user_session_channel, session_timestamp, session_transaction 테이블 사용 다음 형태의 결과를 만들어보기 매출은 refund 포함 3개의 테이블을 각기 데이터프레임으로 로딩 데이터프레임별로 테이블 이름 지정 Spark SQL로 처리 먼저 조인 방식 결정 조인키 조인방식(INNER, LEFT, RIGHT, FULL) 다음으로 간단한 지표부터 계산 1. Redshift 커넥트 # Redshift와 연결해서 DataFrame으로 로딩하기 url = "jdbc:redshift://learnde.cduaw970ssvt.ap-northeast-2.redshift.amazonaws.com:5439/dev?user=아이디&pas..

데이터 엔지니어링/Spark

17. SparkSQL(JOIN - DataFrame, SQL)

실습 문제들 1. JOIN 실습 2. 매출 사용자 10명 알아내기(RANKING) 3. 월별 채널별 매출과 방문자 정보 계산하기(Grouping) 4. 사용자별로 처음 채널과 마지막 채널 알아내기(Windowing) 실습 사용 테이블 3개 설명 - 사용자 ID, 세션 ID 사용자 ID : 보통 웹서비스에서는 등록된 사용자마다 유일한 ID를 부여 -> 사용자 ID 세션 ID : 사용자가 외부 링크(보통 광고)를 타고 오거나 직접 방문해서 올 경우 세션을 생성 즉 하나의 사용자 ID는 여러 개의 세션 ID를 가질 수 있음 보통 세션의 경우 세션을 만들어낸 소스를 채널이란 이름으로 기록해둠 마케팅 관련 기여도 분석을 위함 또한 세션이 생긴 시간도 기록 이 정보를 기반으로 다양한 데이터 분석과 지표 설정이 가능..

데이터 엔지니어링/Spark

16. SparkSQL(udf 활용 dataframe 가공 및 spark sql 활용 집계)

UDF 실습 앞선 포스팅의 UDF를 실습 하나의 레코드로부터 다수의 레코드 만들어내기 Order 데이터의 items 필드에서 다수의 Order item 레코드를 만들기 (1) Spark Session 생성 from pyspark.sql import SparkSession import findspark findspark.init() spark = SparkSession \ .builder \ .appName("Python Spark UDF") \ .getOrCreate() (2) Dataframe/SQL에 UDF 사용해보기 #1 columns = ["Seqno","Name"] data = [("1", "john jones"), ("2", "tracey smith"), ("3", "amy sanders")]..

데이터 엔지니어링/Spark

15. Spark SQL(UDF, Pandas UDF Scalar)

UDF(User Defined function) 사용해보기 데이터프레임의 경우 .withColumn 함수와 같이 사용하는 것이 일반적 Spark SQL에서도 사용 가능함 Aggregation용 UDAF(User Defined Aggregation Function)도 존재 GROUP BY에서 사용되는 SUM, AVG와 같은 함수를 만드는 것 PySpark에서 지원되지 않음. Scalar/Java를 사용해야함 보통 UDF는 pandas UDF 스칼라함수를 사용(하나씩 처리 -> 배치 처리 가능) (1) UDF - DataFrame 사용해보기 #1 주어진 데이터를 대문자로 만드는 UDF import pyspark.sql.functions as F from pyspark.sql.types import * upp..

데이터 엔지니어링/Spark

14. Spark SQL(Aggregation-JOIN, Shuffle JOIN, Bucket JOIN, BroadCast JOIN)

SQL Aggregation 함수 DataFrame이 아닌 SQL로 작성하는 것을 추천 Group By (SUM, MIN, MAX, AVG, COUNT) Window(ROW_NUMBER, FIRST_VALUE, LAST_VALUE) Rank JOIN SQL 조인은 두 개 혹은 그 이상의 테이블들을 공통 필드를 가지고 머지 스타 스키마로 구성된 테이블들로 분산되어 있던 정보를 통합하는데 사용 왼쪽 테이블을 LEFT라고 하고 오른쪽 테이블을 RIGHT이라고 하면 JOIN의 결과는 방식에 따라 양쪽의 필드를 모두 가진 새로운 테이블을 생성 조인의 방식에 따라 다음 두가지가 달라짐 어떤 레코드들이 선택되는지? 어떤 필드들이 채워지는지? 다양한 종류의 조인 (1) JOIN 실습 - 예제 데이터 준비 (2) JOI..

데이터 엔지니어링/Spark

13. Spark SQL 소개(사용법, 외부 데이터베이스 연결)

SQL의 중요성 데이터 분야에서 일하고자하면 반드시 익혀야할 기본 기술 구조화된 데이터를 다루는 한 SQL은 데이터 규모와 상관없이 쓰임 모든 대용량 데이터 웨어하우스는 SQL 기반 Redshift, Snowflake, BigQuery Hive/Presto Spark도 예외는 아님 Spark SQL이 지원됨 요즘 마케터 직종에 있는 분들도 SQL을 배우는 분들이 많다. UDEMY는 신입들은 ONBOADING에서 전부 SQL을 배웠다. 하지만 많은 사람들이 테이블을 만들 수 있으면, DATA DISCOVERY 문제가 발생한다. 현업에서 데이터 직군이 아님에도 불구하고, 데이터 분석을 하는 사람이 늘어난다. 이 사람들은 CITIZEN DATA ANALYST, CITIZEN DATA SCIENTIST라고도 하..

일기

Spark 공부하면서 쓴 일기

배운 것 Spark DataFrame 활용 데이터 가공 및 처리 정형데이터 처리 쪽은 SparkSQL이 훨씬 편하고 좋은 것 같음 그런데 정형데이터 처리할 때 조금 난해한 문제들이 있음 예를 들어 데이터 하나가 1정규화 안된 채로 있어서, 이걸 1정규화 해줘야 하는 경우 split, explode 같은 거 활용(pandas랑 크게 다르지 않음) 비정형 데이터 처리 regex 핵꿀 데이터 저장 데이터 저장 방식이 좀 흥미로웠는데, 애초에 Spark은 partition 단위로 가공하기 때문에 파일을 저장해도 애초에 폴더로 저장해서, 그 안에 part로 저장됨 일단 지금은 standalone이라 1개씩 저장되는데, 기본적으로 큰 데이터 가공하면 part가 여러 개씩 나올듯(예를 들면 data.csv로 저장하면..

데이터 엔지니어링/Spark

12. Spark DataFrame 실습(Redshift 연결, jdbc, join)

실습 5. Redshift 연결해보기 MAU(Monthly Active User) 계산해보기 두 개의 테이블을 Redshift에서 Spark로 로드 JDBC 연결 실습 DataFrame과 SparkSQL을 사용해서 조인 DataFrame JOIN left_DF.join(right_DF, join condition, join type) join type : "inner", "left", "right", "outer", "semi", "anti" * redshift jdbc jar 파일 넣는 경로(윈도우) C:\Spark\spark-3.4.1-bin-hadoop3\jars https://docs.aws.amazon.com/ko_kr/redshift/latest/mgmt/jdbc20-download-drive..

데이터 엔지니어링/Spark

11. Spark DataFrame 실습(trim, split, explode, overwrite, sort)

실습 4. stackoverflow 서베이 기반 인기 언어 찾기 stackoverflow CSV 파일에서 다음 두 필드는 ;를 구분자로 프로그래밍 언어를 구분 LanguageHaveWorkedWith LanguageWantToWorkWith 이를 별개 레코드로 분리하여 가장 많이 사용되는 언어 top50와 가장 많이 쓰고 싶은 언어 top 50 계산해보기 (1) Spark Session Build from pyspark.sql import SparkSession # .config("spark.jars", "/usr/local/lib/python3.7/dist-packages/pyspark/jars/RedshiftJDBC42-no-awssdk-1.2.20.1043.jar") \ spark = SparkSe..

우상욱
'분류 전체보기' 카테고리의 글 목록 (5 Page)