Programming
-
[에러로그]parquet파일 변환 fastparquet v.s pyarrowProgramming/python 2021. 11. 19. 16:06
에러 내용 parquet로 변환한 파일을 read해서 확인했을 때 일부 컬럼의 로우 값이 제대로 인코딩되지 않은 문제가 있다. 다른 컬럼의 값들은 정상적으로 표출되었지만 특정 컬럼에서만 이상이 생기는 것을 확인했다. to_parquet 메소드 pandas 라이브러리에서 to_parquet 메소드를 사용해서 데이터프레임을 parquet 포맷으로 변경할 때, 사용할 수 있는 엔진의 옵션은 두 가지가 있다. pyarrow와 fastparquet이 바로 그것인데, pandas 내부적으로 이 두 라이브러리들을 가져와서 parquet파일로 변환하게 된다. 라이브러리를 선택하는 방법은 engine 파라미터에 해당하는 라이브러리명을 적어주면 된다. df.to_parquet("test.parquet", engine="p..
-
dockerfile 한국어 로케일 설정(feat. 우분투와 데비안의 차이)Programming 2021. 8. 10. 15:43
어플리케이션 내부나 쉘에서 한글이 등장할 때가 있는데 그때마다 오류가 생겨서 아예 언어셋을 UTF-8 인코딩된 한글 언어셋으로 설정했다. 해당 언어셋을 설치하기 위해서 아래와 같은 명령어를 dockerfile에 명시했다. RUN apt-get update && apt-get install -y locales git # Locale RUN localedef -f UTF-8 -i ko_KR ko_KR.UTF-8 ENV LC_ALL ko_KR.UTF-8 ENV PYTHONIOENCODING=utf-8 빌드 한 뒤에 docker run -it imagename /bin/bash 로 도커 내부의 쉘로 접속했더니 다음과 같은 경고가 떴다. bash: warning: setlocale: LC_ALL: cannot c..
-
파이썬 데코레이터에서 wraps를 사용해야 하는 이유Programming/python 2021. 6. 27. 22:48
파이썬에는 함수를 파라미터로 받아서 함수를 반환하기 위해서 데코레이터를 사용한다. 말하자면 함수의 함수인 셈인데, 파라미터 변환이나 코드 추적(로깅), 유효성 검사 및 재시도 로직 등 이 데코레이터를 사용하면 다양한 작업들을 손쉽게 처리해줄 수가 있다. 이 데코레이터를 사용할 때에는 주의해야할 점이 몇가지 있는데 오늘은 그 주의할 점에 대해서 이야기 하려고 한다. import logging as logger def trace_decorator(function): def wrapped(*args, **kwargs): """ decorator docstring """ logger.info("%s 실행", function.__qualname__) return function(*args, **kwargs) re..
-
Luigi로 batch job 모니터링 및 스케줄링Programming 2021. 6. 19. 17:28
개요 Spotify에서 개발한 오픈 소스 실행 프레임워크로, 복잡한 데이터 파이프 라인을 Python으로 배치 작업을 만들어 실행할 수 있다. 종속성 해결, 워크 플로 관리, 시각화, 실패 처리, 명령 줄 통합 등을 처리하는데 사용한다. 하이브나 Pig 또는 Cascading과 같은 로우 레벨에서의 데이터 전처리에 초점에 맞춰져있는 이런 프레임워크를 대체할 수는 없다. 대신에 많은 task들을 하나로 합치게 도움을 준다. 이름이 루이지인건 아마도 슈퍼마리오의 루이지가 배관공이라서 파이프라인을 다루는 일이기 때문이 아닐까 추측 기본 구조 Task class ExampleTask(luigi.Task): # Parameter 정의 count = luigi.IntParameter(default=7) def re..
-
Druid + superset로 BI 아키텍쳐 구축하기Programming 2021. 3. 28. 22:57
드루이드란? Druid는 대량의 트랜잭션 이벤트를 ingestion하고 탐색할 수 있도록 지원하는 엔진이다. 실시간과 시계열 데이터에서 100ms 이하의 쿼리 응답속도를 위해 설계된 오픈 소스 데이터 저장소 실시간/배치 데이터로 데이터를 수집해서 빠르게 BI쿼리(OLAP)를 처리, 분석하는 목적으로 사용 데이터 roll-up을 통해서 ingestion되는 원천 데이터를 취합할 수 있다. roll-up을 하면 원천 데이터의 저장 용량을 최소화 할 수 있고 스토리지 리소스를 절약하고 쿼리 속도를 빠르게 하지만 개별 이벤트들에 대해 쿼리할 수 없게 된다. OLAP(On-Line Analytical Processing)? OLAP, 온라인 분석 처리는 다차원 데이터 구조를 이용하여 다차원의 복잡한 질의를 고속으..
-
[에러로그]파이어폭스에서 리액트 SVG 리사이징하기Programming/.JS 2021. 2. 6. 15:45
파이어폭스에서만 적용이 되지 않는 svg 아이콘 사이즈 개인적으로 파이어폭스를 애용하는 중인데, 유독 다른 브라우저에서는 모두 아이콘이 정상적으로(크롬, 사파리, 엣지)작동하는 것에 비해 파이어폭스에서는 적용되지 않는 것이 보였다. 블링크나 웹킷 엔진 기반에서는 사이즈가 제대로 반영이 되지만 게코 엔진(발음이 이상하지만 gecko engine이다)과 다른 것이 무엇일까 생각하면서 한참을 github 이슈나 구글링을 통해서 찾아본 결과 크게 다른 이슈될만한 버그리포트나 티켓들을 찾아볼 수 없었다. 그래서 직접 개발자도구로 해당하는 Attribute를 타겟팅해서 태그를 직접 비교해봤다. 놀랍게도 아주 미묘한 차이를 발견할 수 있었는데 다른 브라우저에서는 스타일 태그의 width와 height에 자동으로 px..
-
[python]str을 dict로 바꾸는 두 가지 방법Programming/python 2021. 1. 24. 18:23
dict는 string으로 변경할 수 있는 데, string은 dict로 변경할 수 없다 dict1 = {"a":"b", "c":"d"} str1 = str(dict1) print(str1) # 실행 결과 {"a":"b", "c":"d"} 딕셔너리 타입을 str로 형 변환을 하면 원하는 것처럼 알맞게 잘 출력한다. 하지만 이 str을 다시 딕셔너리 타입을 변경하려고 하면 에러가 발생한다. dict1 = '{"a":1, "b":2}' print(dict(dict1)) # 실행 결과 dictionary update sequence element #0 has length 1; 2 is required str을 dict로 바꾸는 방법 1. string으로 형 변환된 것을 eval을 사용해서 코드화 한다. str..
-
argument v.s parameter, function v.s. methodProgramming 2020. 12. 13. 16:28
귀에 걸면 귀걸이 코에 걸면 코걸이지만 어디가 코인지, 어디가 귀인지 어디가 코인지는 확실히 알자는 마음에서 정리. 둘은 비슷한 단어로 자주 혼동해서 사용하지만 사실 그 쓰임새가 다르다. argument와 parameter의 차이 parameter는 매게변수로 번역하고 argument는 인자로 번역된다. public void MyMethod(string myParam) { } 메소드를 정의할 때 myParam을 parameter라고 부른다. string myArg1 = "this is my argument"; myClass.MyMethod(myArg1); 메소드를 호출할 때 메소드의 파라미터로 보내지는 데이터를 argument라고 부른다. 메소드를 정의할 때는 parameter, 메소드를 호출할 때는 a..