pyspark 17

Pyspark로 k-means clustering 구현하기.

pyspark로 k-means 클러스터링을 하는 code를 정리한다. 우선, pyspark에서 머신러닝 module을 사용하기 위해서는 알고리즘에 사용되는 features의 vectorize 과정이 필요하다. (vector 형태의 column이 ML 알고리즘의 Input으로 들어가게됨) 여기서 pyspark의 vector에 대해 정리해뒀는데 참고! https://sikmulation.tistory.com/45 [PySpark] dense 벡터와 sparse 벡터, UDF로 sparse vector 만들기 1.vector 개념 희소 벡터를 생성하려면 벡터 길이(엄격하게 증가해야 하는 0이 아닌 값과 0이 아닌 값의 인덱스)를 제공해야 합니다. pyspark.mllib.linag.Vecotors 라이브러리는..

[PySpark] 오버샘플링(oversampling), 언더샘플링(undersampling)

기계 학습에서 불균형 훈련 데이터 세트로 분류 문제를 다룰 때 오버 샘플링과 언더 샘플링은 결과를 개선하는 두 가지 쉽고 종종 효과적인 방법이다. 1.불균형(imbalanced) 데이터란? 데이터셋의 한 클래스(레이블) 수가 다른 클래스보다 상당히 많거나 적을때 데이터의 클래스가 불균형 상태라고 말한다. '불균형'이라는것이 상당히 분석가나 과학자의 입장에서 주관적인 판단이 개입된다. 그리고 실제 문제를 ML(머신러닝, 기계학습)으로 해결할 때 깔끔하게 균형잡힌 데이터를 만나기는 힘들다. (예를들어, 이상치 탐지, 사기탐지 데이터, 질병 데이터 등) 머신러닝 모델은 맹목적으로 다수의 클래스를 대부분 학습하기 때문에 대다수 예측 데이터를 학습된 다수의 클래스로 예측하려는 경향이 있다. 그렇기 때문에, 소수 ..

[PySpark] round(반올림), ceil(올림), floor(내림) 함수로 소수점 자리까지 다루기

PySpark를 사용하여 DataFrame의 특정 컬럼을 반올림, 올림 또는 내림하는 방법은 round(), ceil(), floor() 함수를 사용한다. PySpark의 ceil 및 floor 함수는 기본적으로 특정 소수 자릿수에서 동작하지 않는다. 특정 소수 자릿수에서 올림 또는 내림을 수행하려면 먼저 원하는 소수 자릿수로 값을 곱한 다음, 올림 또는 내림한 후에 다시 나누는 방법을 사용해야 한다. 즉, 원하는 자릿수 만큼 곱해서 올림이나 내린 다음에 다시 자릿수 만큼 나눠주는 작업이 필요하다. 0.참고사항 from pyspark.sql.functions import expr # DataFrame에서 "value" 컬럼을 소수점 둘째 자리로 올림 df = df.withColumn("ceiled_val..

[PySpark] 학습된 로지스틱 모형의 계수 확인하기.

우선, 모델의 학습에 필요한 train, test 셋이 있다는 가정하에 다음과 같이 3차 교호법(3 fold crossvaildaition)을 통해 로지스틱 모형을 학습하고 test 데이터 셋에 스코어링 하는 코드이다. pyspark에서 로지스틱 모형의 파라미터 옵션은 https://runawayhorse001.github.io/LearningApacheSpark/reg.html 10. Regularization — Learning Apache Spark with Python documentation 10. Regularization In mathematics, statistics, and computer science, particularly in the fields of machine learning..

[PySpark] array_intersect로 array간 같은 value값 찾기

다음과 같은 'data'라는 데이터 프레임이 있다. 그리고 데이터 프레임에 collect_list(site_app)이라는 array 구조의 컬럼이 있는데 해당 컬럼에서 list_A의 list value 값이 몇개가 있는지 궁금하다. data = [("oaid_1", ["app1", "app2", "app3"], [10, 20, 30], [1, 2, 3]), ("oaid_2", ["app2", "app4", "app5"], [15, 25, 35], [2, 4, 5]), ("oaid_3", ["app1", "app3", "app4"], [12, 22, 32], [1, 3, 4])] # Create a DataFrame with the sample data columns = ["oaid", "collect_l..

airflow DAG 결과를 Slack API로 메세지 받아보기

기존에 Jenkins를 이용해 코드 배치관리를 진행했는데 코드 관리나 배치 관리 복잡도가 증가하면서 모델별로 하나의 DAG로 관리하고 체계적인 system화를 위해 airflow로 배치를 옮기고 있다. 거기다 기존의 hive sql을 pyspark로 구현해서 정리까지 하고있는데 병아리 수준에서 시스템, 코드를 뜯어보고 새롭게 구성하려고 하니 에러 투성이다 ㅠ Slack에서 제공되는 API를 활용하여 구성해둔 DAG가 정상 작동 했는지 메세지를 전달 받아 모니터링을 효율적으로 하는 목적으로 해당 페이지를 작성했다. 참고로 Slack과 airflow는 설치 및 세팅이 돼 있다는 가정하에 작성했고 DAG 구성에 대한 디테일한 설명은 없다. 추후에 공부하고 정리해서 따로 올리려고 한다. [목차] 1.airflo..

[PySpark] explode, explode_outer 함수 차이

다음과 같은 스키마를 가진 테이블을 생성했다. an_array 라는 array 컬럼 하나와 a_map 으로 묶어진 key - value 컬럼이 존재한다 df = spark.createDataFrame( [(1, ["foo", "bar"], {"x": 1.0}), (2, [], {}), (3, None, None)], ("id", "an_array", "a_map") ) df.show() +---+----------+----------+ | id| an_array| a_map| +---+----------+----------+ | 1|[foo, bar]|{x -> 1.0}| | 2| []| {}| | 3| null| null| +---+----------+----------+ df.printSchema()..

[PySpark] 신용카드 사기거래 탐지 모델링(3) - 기본모델링

item 우선, 회사에서 데이터 모델링 작업을 하다가 라벨이 심각하게 불균등하고, 게다가 데이터 정보량도 거의 없어 모델링이 필요한가? rule 기반으로 분류 작업을 하면 안될까??? 라는 고민을 하다가 현재 데이터에서 주성분 몇개 빼고 정보량이 없는 상태에서 모델간의 성능 비교를 해보자는 취지로 진행하였다. 그냥 주성분 전부 다써서 기본 로지스틱 모델만 돌려도 성능이 꽤나오는 깔끔한 데이터니 해보실분들은 따로 해보길 권한다. 1. ML용 Input 데이터 구성 우선, Pyspark ML을 이용하기 위해서는 vectorassembler을 이용해 머신러닝 알고리즘용 featurevector를 구성한다. feature가 dense vector 또는 sparse vector로 구성되는데 리소스에 따라 효율이 ..

[PySpark] 신용카드 사기거래 탐지 모델링(1) - 데이터 탐색

실제 데이터 모델링 업무를 하다보면 클래스 불균형(class imbalanced, 라벨 불균형)인 데이터를 자주 만나게 된다. 일반적으로, 머신러닝 모델은 클래스의 비중이 비슷할때 가장 잘 작동하지만 그런 균형있는 데이터를 다루기엔 현실적으로 쉽지않다. 따라서, 데이터가 심각하게 불균형(highly imbalanced)인 상황에서 어떤 문제가 있고, 어떻게 의사결정하여 문제를 해결했는지 정리하고자 한다. 해당 데이터는 kaggle: Credic Card Fraud Detection에서 다운로드 가능하다. 데이터는 2013년 9월 유럽에서 발생한 신용 카드 거래내역이다. 이 데이터는 이틀 동안 발생한 거래내역을 보여주며, 여기서 284,807건의 거래중 492건의 신용카드 거래가 사기로 판별됐다. 클래스가..

[PySpark] dense 벡터와 sparse 벡터, UDF로 sparse vector 만들기

1.vector 개념 희소 벡터를 생성하려면 벡터 길이(엄격하게 증가해야 하는 0이 아닌 값과 0이 아닌 값의 인덱스)를 제공해야 합니다. pyspark.mllib.linag.Vecotors 라이브러리는 dense(고밀도), sparse(희소) 두 유형의 로컬 벡터를 지원한다. 희소 벡터는 벡터안에 숫자가 0이 많은 경우에 사용한다. 희소 벡터를 생성하려면 벡터 길이와 0이 아닌 값과 0이 아닌 값의 인덱스 총 세가지의 인자를 넣어야 한다. tip! 일반적으로 ML 모델 feature 구성시 vector assembler를 활용해서 features를 하나의 벡터로 구성한다. Vector Assembler가 메모리를 적게 사용하는 형식 중 하나를 기준으로 dense 벡터와 sparse 벡터를 선택한다. 또..