Spark Connect 알아보기
Spark 3.4 버전에서 Spark Connect가 추가되었습니다. 간단히 정리하자면 Spark Connect는 기존 방식에서는 합쳐져 있던 Spark Driver와 Client의 역할을 명시적으로 분리해서 여러 사용자가 Spark Cluster를 공유할 때 발생하는 문제(멀...
Spark 3.4 버전에서 Spark Connect가 추가되었습니다. 간단히 정리하자면 Spark Connect는 기존 방식에서는 합쳐져 있던 Spark Driver와 Client의 역할을 명시적으로 분리해서 여러 사용자가 Spark Cluster를 공유할 때 발생하는 문제(멀...
Spark bucketing의 특징과 잘 쓰기 위한 방법에 대해 정리합니다.
Spark를 많이들 쓴다고 해서 어떻게 쓰는지 궁금한데, 어디서 시작해야하는지 모르겠다 싶은 분이 읽으면 좋을 것 같습니다.
스파크 클러스터의 아키텍처와 스파크 어플리케이션 작업 흐름에 대해 정리해봅니다. 내가 제출한 작업이 스파크 클러스터에서 어떻게 시작되고 종료되는지 알아보고 싶은 분에게 추천합니다. 이번엔 코드는 없습니다.
Spark는 Thrift server를 지원합니다. 그런데 Thrift가 뭔가요?
Build scala Fat-Jar with SBT for spark-submit. SBT와 intelliJ를 이용해 scala spark 프로젝트를 fat-jar로 빌드하고, 잘 되었는지 spark-submit로 테스트 해봅니다.
구분자 두 개와 함께 들어올 수도 있고 안들어올 수도 있는 형식에 맞지 않는 헤더를 가진 텍스트 파일 처리 - DataFrameAPI로는 조금 까다로운 파일을 textFile 과 rdd의 map 을 이용해서 처리해봅니다.
spark sql로 작업을 하다보면 auto schema 때문에(혹은 연산을 거친 후에) 형식이 바뀌는 경우가 발생하는데, 갑자기 튀어나오는 Null이 종종 문제가 됩니다. 파케이로 저장하면 Null 형식을 지원하지 않는다고 하면서 에러를 뿜거든요.
파이썬에 주피터 노트북이 있다면, 스파크에는 제플린 노트북이 있습니다. 이번에는 제플린 노트북에서 생산성을 극대화시킬 단축키에 대해 정리해보겠습니다. Zeplin 아니고 Zeppelin
jdbc driver를 이용해서 spark로 db 데이터를 읽거나 쓸 수 있습니다.
파티셔닝으로 데이터를 분할함으로써 쿼리가 스캔하는 데이터의 양을 제한하여 성능을 향상시킬 수 있습니다. 관리도 훨씬 편해집니다.
스파크는 하이브 메타스토어를 사용하기 때문에 하이브와 연동이 자연스럽습니다. 이번 포스트에서는 하이브 테이블의 생성, 삭제, 삽입, 변경 등을 알아보겠습니다. 하이브에는 관리형 테이블과 외부 테이블이라는 생소한? 개념이 있습니다.
스파크를 사용하며 얻은 팁을 정리해보았습니다. 데스크탑 환경에서는 좌측 사이드바에서, 모바일에서는 제목 위의 Toggle Menu를 누르시면 스파크 관련 글을 확인할 수 있습니다.
구조적 스트리밍은 트리거를 통해 언제 출력할지 결정할 수 있습니다. 기본적으로는 이전 작업이 끝나면 (마이크로 배치) 바로 다음 작업에 들어가지만, 너무 빠른 속도로 끝없이 동작하면 부하가 많이 가기 때문에 인터벌(100초 간격 등)을 설정하거나, 단 한번만 작동하도록 설정할 수 ...
실시간으로 입수되는 데이터를 Spark로 처리하는 방법에 대해 정리합니다. 스파크 2.2버전 기준으로 작성되었습니다. 스파크 3.0의 정식 릴리즈를 기다리며
스파크의 분산처리 능력을 머신러닝에 사용할 수 있습니다. 간단한 자연어 처리 예제와 함께 알아보겠습니다. 비교적 쉽게 접할 수 있는 scikit-learn, R, tensorflow와 달리 SparkML은 흔치 않지만, 나름대로의 장점이 있습니다.
모든 데이터 작업의 시작이자 끝인 ETL! 스파크를 이용하여 파일을 읽고, 변형하여 저장하는 방법에 대해 소개합니다. 데이터는 Kaggle의 Suicide Rates Overview 1985 to 2016를 사용했습니다.
제플린은 주피터와 비슷하게 웹기반의 노트북 스타일 에디터라고 할 수 있습니다. 아파치 재단의 공식 도커 이미지로 제플린을 설치해보겠습니다. 사용할 이미지는 built-in apache spark를 지원합니다. 스파크 사용법을 익히기에 좋습니다.
데이터를 다루다보면 하나의 로우를 여러개로 분리해야하는 상황이 온다. 다음은 explode 를 활용한 예
Spark SQL에서 Oracle의 ROWID와 같은 기능을 사용해보자 한다. ROWID는 인덱스의 핵심이라고도 하는데, 이를 활용하여 중복제거, 유일성 부여 등의 작업이 가능하다.
spark sql에서는 update를 지원하지 않는다. (작성일 기준) RDD의 특성에 대해 생각해 보면 그 이유는 어렵지 않게 떠올릴 수 있지만, UPDATE를 주로 사용하는 오라클 쿼리를 spark버전으로 포팅하려는 입장(필자)에서는 굉장히 아쉬운 부분이다. 그래서 공부도 할 ...
SparkSQL은 이름처럼 스파크 내에서 SQL문법을 사용 가능하게 하는 awesome한 도구다. 따라서 스파크를 코딩에 친숙하지 않은 구성원들이 마치 oracle을 사용하는 것 마냥 이용이 가능하다. (물론 다소간의 노력은 필요하다.)
작년도 꽤 많은 일이 있었습니다. 올해를 잘 보내기 위해 한 해를 돌아봤습니다.
어떤 브라우저를 쓰시나요? Chrome, Safari, Edge, Brave, Whale 등 많은 브라우저가 있죠. 저는 크롬을 주로 쓰지만, 다른 브라우저를 써봐도 다 비슷해 보이더라고요. 상단 탭 구조 언저리에 주소창이 있고, 즐겨찾기 해놓은 페이지가 있고, 우상단에는 익스텐...
중요한 질문입니다. 목표를 정해두고 그 목표를 달성하기 위해 집중하다보면, 종종 왜 그걸 해야하는지 잊을 때가 있는데요. 그럴 때 이 질문을 해봐야합니다.
2022 상반기 회고로 정리를 한번 했지만, 적당히 리마인드하며 2022년 있었던 일 + a 를 정리해봅니다.
장인은 도구를 탓하지 않는다 라는 말이 있습니다. 장인이 물론 좋지 않은 도구로도 일 할 수 있을 겁니다. 그런데 장인이 생산성을 높이는 멋진 도구를 두고 굳이 낡은 도구로 일할까요? 이번에는 IDE에 대해 얘기해보고자 합니다.
많은 주니어, 신입의 공통된 어려움인 것 같습니다. 정답은 없고 뻔한 얘기일 수도 있지만, 제가 해온 방법을 공유해보려고 합니다. 시니어의 기준은 다르겠지만, 여기서는 무언가(기술, 비즈니스 매너, 업무)를 보고 배울 사람이라고 정의하겠습니다.
상반기를 돌아보며 세가지 주제(확장하는 팀과 개인, 좋은 동료와 성장, 그리고 스트레스 관리)에 대해 정리해봤습니다. 21년 회고글 이후로 첫 글이네요.
벌써 3년 차가 끝나고 4년 차 데이터 엔지니어가 되었습니다. 올 한 해를 정리하는 글입니다.
지난 다짐글을 돌아보니 간단한 다짐, 앞으로 쓸 주제 언급 정도의 간단한 글을 썼는데, 이번에는 구체적으로 어떤 글을 쓸지 계획해봅니다. 조회수 분석이라고 붙이긴 했지만, 거창한 건 아니고 어떤 글을 쓰는 게 좋을지 참고하는 용도로 GA를 살짝 이용해봤습니다.
이번 글은 글또 5기를 회고하는 글입니다. 글또 5기를 시작하며 글또 다짐글을 시작으로 총 9개의 글을 썼습니다. 사실 다짐글은 아주 짧은 글이어서 포스팅이라 할만한 글은 8개가 되겠네요.
상반기 회고를 애매하게 8월에 쓰고, 1월이 되어서야 2020년 회고 및 새해 다짐을 해봅니다.
이번에도 글또와 함께 열심히 써보려 합니다.
이번 글은 2020년 1월부터 8월까지 한 일과, 올해 앞으로 할 일들을 정리하는 글입니다.
2020년도 벌써 1.8개월이 지났습니다. 최근 급격히 바빠지면서 지난달에 세운 올해 상반기 목표 달성이 꽤 힘겹게 느껴지는데, 그 와중에 새로운 목표가 하나 더 생겼습니다. 일단 저질러놓고 수습하다 보면 무언가는 얻겠죠. 새로운 추가 목표는 글또(글 쓰는 또라이가 세상을 바꾼다)...
새해 첫 블로그 포스트
데이터 엔지니어 겸 ML엔지니어 겸 겸겸겸을 맡고 있습니다.
Jekyll을 이용해 첫 포스트를 써본다. Hexo로 한번 만들어 봤더니 크게 어렵..지 않을 줄 알았는데, 어렵긴 하다. 이 포스트가 fix없이 한방에 올라가기나 했으면 좋겠다.
Airflow 버전에 따라서 의존성 때문에 slack operator 쓰기가 영 불편합니다. 그래서 python slack sdk로 slack operator를 대체하는 방법에 대해 정리해봅니다.
Airflow의 task는 독립적으로 실행되기 때문에 기본적으로는 서로 통신할 수단이 없습니다. 하지만 막상 작업 흐름을 만들다 보면 이전 작업의 결과, 요소 등을 다음 작업에 전달하면 깔끔하게 진행되는 경우가 있습니다. 그런 부분을 해결하기 위해 XCom을 이용해 메세지를 교환할...
재사용할 여지가 많은 task들을 묶어 subdag로 만들어 보겠습니다. 이렇게 하면 지저분한 과정들을 묶어서 한눈에 프로세스를 파악하기도 편하고, 관리도 쉬워집니다.
지난 포스트에 이어 CELERY EXECUTOR를 사용하는 에어플로우, 도커로 설치하기 입니다. 설치 앞부분을 위한 깃레포, 도커이미지를 받아오는 부분은 이전 포스트를 확인해주세요.
docker를 이용하여 airflow를 로컬에 설치하던 것보다 더 쉽게 설치해보겠습니다. 에어플로우를 더 아름답게 쓰기 위해서는 executor, db 설정이 필요한데, 모든 환경설정이 그렇듯이 설치할 부품들이 늘어날수록 고통도 늘어납니다. 이런 상황에서 docker는 그런 고통들...
선행 작업의 결과에 따라 이어나갈 작업이 달라야 할 때는 Branch로 분기를 나누어 줄 수 있습니다.
Airflow는 flask에서 자주 사용되는 강력한 도구인 Jinja Template을 지원합니다.
작업 상황, 결과 등을 슬랙으로 전달하는 데 이용할 수 있는 Operator 입니다. (Mattermost도 됩니다.)
설치를 마쳤다면 간단한 예제를 바로 실행해볼 수 있습니다.
에어플로우를 사용하기 위한 가장 기초적인 개념에 대해 정리해봤습니다.
다양한 extra pakages가 존재하나, 일단 기본 airflow를 설치합시다.
일반적으로 객체 지향 프로그래밍(OOP)에서 상위 계층(혹은 모듈)은 하위 계층의 구현에 의존적입니다. 계층 간의 의존성이 높아질수록(tight coupling) 코드의 유지, 변경에 어려움이 생기는데, 의존관계 역전 원칙(DIP)을 적용하여 결합을 느슨하게(loosely coup...
함수 호출 방식에 대해 정리했습니다.
이번에는 캐시에 대해 공부하며 정리해보았습니다.
알아두면 쓸모있는 자료구조 정리
기술 발전에도 불구하고 주기억장치, 메인 메모리는 언제나 부족하다. 발전하는 만큼 프로그램도 커지기 때문이다. 효과적 사용을 위해서 다음과 같은 방법들을 사용한다.
프로그램은 디스크 안에 잠자고 있는 상태이고, 프로그램을 메모리에 올리면(실행시키면) 프로세스가 된다.
프로세스는 작업을 진행하기 위해 자원을 필요로 하는데, 한정된 자원을 때문에 프로세스가 진행되지 못하고 무한정 대기하게 되는 교착상태가 발생하기도 한다.
가상메모리란, 물리 메모리보다 큰 프로세스를 실행하기 위한 개념이다. 프로세스 이미지를 모두 메모리에 올리지 않고 현재 필요한 부분만 메모리에 올린다. <- 동적 적재와 유사(dynamic loading)
디스크 접근 시간은 Seek time, rotational delay, transfer time 으로 구성되며, 이 중 데이터의 위치는 찾는 Seek time 이 가장 오래 걸린다. 데이터를 읽고 쓰는 작업을 위한 대기열인 디스크 큐 (disk queue) 에는 많은 요청(requ...
보조기억장치인 파일 시스템(하드 디스크)에 파일을 할당하는 방법
파티셔닝으로 데이터를 분할함으로써 쿼리가 스캔하는 데이터의 양을 제한하여 성능을 향상시킬 수 있습니다. 관리도 훨씬 편해집니다.
스파크는 하이브 메타스토어를 사용하기 때문에 하이브와 연동이 자연스럽습니다. 이번 포스트에서는 하이브 테이블의 생성, 삭제, 삽입, 변경 등을 알아보겠습니다. 하이브에는 관리형 테이블과 외부 테이블이라는 생소한? 개념이 있습니다.
선분이력 테이블은 시작 시점과 종료 시점을 관리함으로써 과거 특정 시점의 데이터 조회를 손쉽게 할 수 있습니다. 또한, 특정 레코드의 상태 변경 이력을 손쉽게 확인 할 수 있습니다.
Spark SQL에서 Oracle의 ROWID와 같은 기능을 사용해보자 한다. ROWID는 인덱스의 핵심이라고도 하는데, 이를 활용하여 중복제거, 유일성 부여 등의 작업이 가능하다.
spark sql에서는 update를 지원하지 않는다. (작성일 기준) RDD의 특성에 대해 생각해 보면 그 이유는 어렵지 않게 떠올릴 수 있지만, UPDATE를 주로 사용하는 오라클 쿼리를 spark버전으로 포팅하려는 입장(필자)에서는 굉장히 아쉬운 부분이다. 그래서 공부도 할 ...
엑셀의 피벗을 생각했는데 sql에서는 뭔가 다르더라. 하지만 결과물은 같다. Hackerrank > SQL > Advanced Select > Occupations
안 쓰던 SQL을 연습하면서 퀴즈를 풀다 보니, 한가지 의문이 생겼다. length나 char_legth나 같은 값을 내는 것 같은 데, 왜 두 개나 있을까? 예전부터 쓰던 문법이라 그런 것인가 싶었지만 다른 이유가 있었다.
분명 Easy 단계인데 오랜만에 sql 써보려니 헷갈리던 문제
python 문자열 정렬 기능 첫 번째 인자의 길이만큼 문자열을 할당하고, 문자열 제외 나머지 공간은 두 번째 인자(default=' ')로 채운다.
해커랭크를 풀면서 발생한 에러다. 문제를 풀던 중, 홀수의 숫자를 반으로 나눈 값의 몫 + 1의 값이 필요했다. 예를 들어 7을 받으면 4, 9를 받으면 5를 반환하면 되었다. 3.5나 4.5나 반올림하면 4, 5 이런 식으로 나오니까 round를 썼다. 결과는 에러.
해당 디렉토리에 있는 파일들의 확장자를 바꿔주는 코드를 실행하려다가 에러가 났다. 디렉토리 주소, 원 확장자, 바꿀 확장자 이렇게 세 개의 인자가 필요하다. 코드의 문제는 아니었고(내가 쓴 코드가 아니니까), 실행 방식의 문제였다.
itertools에는 순열과 조합에 관련된 결과를 뱉는 iterators 또한 구현되어 있다. 순열, 조합에 대한 코딩 알고리즘 문제를 종종 볼 수 있는데, itertools만 알아놔도 아주 간단히 해결이 가능하다. 못 쓰게하면 어쩔 수 없지만.
대망의 itertools. python3 공식 문서의 순서대로 정리했다. Infinite iterator 3개, 아닌 것 12개. combination은 따로 정리해야겠다.
itertools 학습을 위해 iterable, iterator, generator를 먼저 정리했다.
python의 숙련도를 높여보고자 itertools를 공부하려고 보니 iterable, iterator, generator, 그리고 asterisk까지 서로 엮여있는 상황이라… 함께 공부하는 것이 나은 듯 하다. 어떤 공부든 요약 정리를 하다 보면 이해가 잘 되는 편이라, 오늘도 ...
도커, 컴포즈까지는 이제 좀 익숙하게 쓰는데, 쿠버네티스는 뭔가 개념도 어렵고 이해가 잘 안 되더라구요. 좋은 공부 자료를 찾아서 조금 숨통이 트이게 되었는데, 같은 어려움을 가진 분들께 공유하고자 합니다.
제플린은 주피터와 비슷하게 웹기반의 노트북 스타일 에디터라고 할 수 있습니다. 아파치 재단의 공식 도커 이미지로 제플린을 설치해보겠습니다. 사용할 이미지는 built-in apache spark를 지원합니다. 스파크 사용법을 익히기에 좋습니다.
지난 포스트에 이어 CELERY EXECUTOR를 사용하는 에어플로우, 도커로 설치하기 입니다. 설치 앞부분을 위한 깃레포, 도커이미지를 받아오는 부분은 이전 포스트를 확인해주세요.
docker를 이용하여 airflow를 로컬에 설치하던 것보다 더 쉽게 설치해보겠습니다. 에어플로우를 더 아름답게 쓰기 위해서는 executor, db 설정이 필요한데, 모든 환경설정이 그렇듯이 설치할 부품들이 늘어날수록 고통도 늘어납니다. 이런 상황에서 docker는 그런 고통들...
이번에도 경로(PATH) 문제였다. docker를 이용해 mysql을 열면서, host OS에 마운트하는 코드였다. (컨테이터가 제거되어도 안에 있는 데이터는 남기기 위한 마운트)
도커를 사용하기 위한 가장 기초적인 것들을 정리하였다. linux 환경을 기초로 작성. 혹시 맥을 사게 된다면 맥 환경도 추가해야지.
파티셔닝으로 데이터를 분할함으로써 쿼리가 스캔하는 데이터의 양을 제한하여 성능을 향상시킬 수 있습니다. 관리도 훨씬 편해집니다.
스파크는 하이브 메타스토어를 사용하기 때문에 하이브와 연동이 자연스럽습니다. 이번 포스트에서는 하이브 테이블의 생성, 삭제, 삽입, 변경 등을 알아보겠습니다. 하이브에는 관리형 테이블과 외부 테이블이라는 생소한? 개념이 있습니다.
피그(Pig)는 대용량 데이터 집합을 분석하기 위한 플랫폼으로 아파치 하둡(Apache Hadoop)을 이용하여 맵리듀스(MapReduce)를 사용하기 위한 높은 수준의 스크립트 언어와 이를 위한 인프라로 구성되어 있다. - wiki
스파크에 대해 알게 되었을 때, 가장 헷갈렸던 부분은 하둡과의 관계였다. 하둡 생태계의 한 부분이면서 하둡의 대체재라니. 하지만 실상은 대체재라기 보다는 보완재였다.
빅-데이터 세상에서, 데이터의 규모가 조금만 커져도 컴퓨터 한대로는 단순히 데이터를 불러오는 것조차 힘겨워지는 경우가 생긴다. 이를 해결하기 위해 Hadoop 을 이용하는 경우가 많아졌다. 데이터 엔지니어의 롤을 가진 분들이 주로 활용하는 툴.
partial regression은 각 독립 변수가 종속 변수에 미치는 영향을 파악하는 방법 중 하나다.
추천 시스템은 사용자들이 평가한 상품들에 대한 정보를 학습하여 아직 평가하지 않은 상품에 대한 점수를 예측하는 모델이다. 여러 추천 시스템 모델 중 Netflix Prize competition에서 좋은 성과를 거둔 SVD에 대해 정리했다.
이전에 살펴본 결정론적 모형은 계산한 가중치의 신뢰도를 부트스트래핑(bootstrapping) 이라는 방법으로 구해야 한다. 반면, 확률론적 모형에서는 부트스트래핑 없이도 회귀분석 결과의 통계적 특성을 구할 수 있다. 확률론적 선형회귀 모형에서는 데이터가 확률 변수로부터 생성된 표...
14년도 계량 경제학 수업을 들을 때 처음 봤지만, 이제야 조금이나마 알 것 같다. 회귀 분석은 데이터가 어떤 특정한 경향을 보인다는 가정 하에 그 경향성을 찾아 설명하는 것이 목적이다.
신경망 모델을 클래스로 구현해보던 중 Saver에서 에러(ValueError: No variables to save)가 발생했다.
이번에도 경로(PATH) 문제였다. docker를 이용해 mysql을 열면서, host OS에 마운트하는 코드였다. (컨테이터가 제거되어도 안에 있는 데이터는 남기기 위한 마운트)
해커랭크를 풀면서 발생한 에러다. 문제를 풀던 중, 홀수의 숫자를 반으로 나눈 값의 몫 + 1의 값이 필요했다. 예를 들어 7을 받으면 4, 9를 받으면 5를 반환하면 되었다. 3.5나 4.5나 반올림하면 4, 5 이런 식으로 나오니까 round를 썼다. 결과는 에러.
해당 디렉토리에 있는 파일들의 확장자를 바꿔주는 코드를 실행하려다가 에러가 났다. 디렉토리 주소, 원 확장자, 바꿀 확장자 이렇게 세 개의 인자가 필요하다. 코드의 문제는 아니었고(내가 쓴 코드가 아니니까), 실행 방식의 문제였다.
이번 포스트에서는 ROC 곡선과 AUC에 대해 정리합니다. 다중분류문제 성능평가 [기본편]에서 이어집니다.
어떤 모델, 혹은 방법을 쓰던 분류 문제는 그 의도에 따라 다양한 성능평가 방식을 사용합니다. 사람, 고양이, 개 3개의 클래스를 분류하는 다중 분류(multi label) 예제를 통해 정리해보겠습니다. 여기에서는 가장 기본이 되는 Accuracy, Recall, Precision...
스파크의 분산처리 능력을 머신러닝에 사용할 수 있습니다. 간단한 자연어 처리 예제와 함께 알아보겠습니다. 비교적 쉽게 접할 수 있는 scikit-learn, R, tensorflow와 달리 SparkML은 흔치 않지만, 나름대로의 장점이 있습니다.
이번에는 캐시에 대해 공부하며 정리해보았습니다.
해커랭크에서 쉬운 문제에도 고전하는 경우가 종종 있는데, 자주자주 이렇게 푸는 습관을 가져야겠다.
스파크의 분산처리 능력을 머신러닝에 사용할 수 있습니다. 간단한 자연어 처리 예제와 함께 알아보겠습니다. 비교적 쉽게 접할 수 있는 scikit-learn, R, tensorflow와 달리 SparkML은 흔치 않지만, 나름대로의 장점이 있습니다.
자연어 처리(Natural Language Processing)는 데이터 사이언스의 큰 난관이자 유망주? 중 하나인데, 영어에 비해 한국어 분석은 특유의 구조적 문제와 더불어(받침의 존재, 다양한 신조어: 멍멍이-댕댕이, 잁럻겛 쓿멶 핞굵 삻람많 읽읅 숡 있읆 등) 관련 연구(가져...
신경망 모델을 클래스로 구현해보던 중 Saver에서 에러(ValueError: No variables to save)가 발생했다.
Tensorboard within Jupyter
파티셔닝으로 데이터를 분할함으로써 쿼리가 스캔하는 데이터의 양을 제한하여 성능을 향상시킬 수 있습니다. 관리도 훨씬 편해집니다.
스파크는 하이브 메타스토어를 사용하기 때문에 하이브와 연동이 자연스럽습니다. 이번 포스트에서는 하이브 테이블의 생성, 삭제, 삽입, 변경 등을 알아보겠습니다. 하이브에는 관리형 테이블과 외부 테이블이라는 생소한? 개념이 있습니다.
데이터 파이프라인(data pipeline)은 말 그대로 파이프처럼 한 데이터 처리 단계의 출력이 다음 단계의 입력이 되는 식으로 데이터의 흐름이 연결되는 구조를 말합니다. 데이터 파이프라인을 구축하는 아키텍처도 시간이 흐르면서 바뀌어왔는데요, 이번에는 원시적인 데이터 처리 아키텍...
쉽게 찾을 수 있는 메타 문자(예약어), 전화번호, 비밀번호, 이메일 규칙 외에 종종 사용하는 정규표현식(Regular Expression, regexp)을 모았습니다.
kubernetes(k8s)를 공부하며 기본 개념 중 node, pod, workload resoures와 서비스에 대해 간략하게 정리했습니다.
도커, 컴포즈까지는 이제 좀 익숙하게 쓰는데, 쿠버네티스는 뭔가 개념도 어렵고 이해가 잘 안 되더라구요. 좋은 공부 자료를 찾아서 조금 숨통이 트이게 되었는데, 같은 어려움을 가진 분들께 공유하고자 합니다.
이번에는 pytest의 fixture, monkeypatch를 소개하면서, unittest보다 훨씬 간편한 pytest를 더 잘 쓰기 위한 방법을 정리합니다.
python에는 JUnit에 영감을 받은 unittest가 있습니다. 그런데 unittest는 다소 장황한 문법으로 인해서 사용이 불편한 감이 있어요. 그래서 훨씬 간편한 pytest를 소개합니다.
이번에는 pytest의 fixture, monkeypatch를 소개하면서, unittest보다 훨씬 간편한 pytest를 더 잘 쓰기 위한 방법을 정리합니다.
python에는 JUnit에 영감을 받은 unittest가 있습니다. 그런데 unittest는 다소 장황한 문법으로 인해서 사용이 불편한 감이 있어요. 그래서 훨씬 간편한 pytest를 소개합니다.
Airflow 버전에 따라서 의존성 때문에 slack operator 쓰기가 영 불편합니다. 그래서 python slack sdk로 slack operator를 대체하는 방법에 대해 정리해봅니다.
이번에는 콘솔을 통해 클라우드 자원을 관리할 수 있음에도 SDK를 통해 코드로 하는 이유를 정리해봅니다. 마우스 클릭 몇 번으로 제어가 가능한데, 왜 코드로 관리할 수 있도록 지원하는 걸까요?
초기 설정 후에는 주로 add, commit, push만 가지고 git을 써왔는데(이마저도 atom을 사용하면 클릭 몇 번으로 대체된다), 한계가 느껴져서 새로운 기능을 쓰게 될 때마다 정리를 하려고 한다.
파이썬에 주피터 노트북이 있다면, 스파크에는 제플린 노트북이 있습니다. 이번에는 제플린 노트북에서 생산성을 극대화시킬 단축키에 대해 정리해보겠습니다. Zeplin 아니고 Zeppelin
파이썬에 주피터 노트북이 있다면, 스파크에는 제플린 노트북이 있습니다. 이번에는 제플린 노트북에서 생산성을 극대화시킬 단축키에 대해 정리해보겠습니다. Zeplin 아니고 Zeppelin
Build scala Fat-Jar with SBT for spark-submit. SBT와 intelliJ를 이용해 scala spark 프로젝트를 fat-jar로 빌드하고, 잘 되었는지 spark-submit로 테스트 해봅니다.
일반적으로 객체 지향 프로그래밍(OOP)에서 상위 계층(혹은 모듈)은 하위 계층의 구현에 의존적입니다. 계층 간의 의존성이 높아질수록(tight coupling) 코드의 유지, 변경에 어려움이 생기는데, 의존관계 역전 원칙(DIP)을 적용하여 결합을 느슨하게(loosely coup...
Spark는 Thrift server를 지원합니다. 그런데 Thrift가 뭔가요?
Spark는 Thrift server를 지원합니다. 그런데 Thrift가 뭔가요?
이번에는 콘솔을 통해 클라우드 자원을 관리할 수 있음에도 SDK를 통해 코드로 하는 이유를 정리해봅니다. 마우스 클릭 몇 번으로 제어가 가능한데, 왜 코드로 관리할 수 있도록 지원하는 걸까요?
Airflow 버전에 따라서 의존성 때문에 slack operator 쓰기가 영 불편합니다. 그래서 python slack sdk로 slack operator를 대체하는 방법에 대해 정리해봅니다.