본문 바로가기

python

[Python] nested json(dict) 플랫화(flatten) nested json을 처리하다 보면 오브젝트로 처리하기 보다 스트링으로 처리하는게 편한 경우가 있습니다. 그럴 때 플랫화 해서 사용하면 좋습니다. 저는 주로 spark에서 구조가 복잡한 json의 leaf들의 통계를 구할 때 많이 사용합니다. 원본: { "a": { "b": { "c": 1 }, "d": 0 } } 플랫화 결과: { "a.b.c": 1, "a.d": 0 } 플랫화 함수 코드: def flatten_json(y): out = {} def flatten(x, name =''): # If the Nested key-value # pair is of dict type deli = '.' if type(x) is dict: for a in x: flatten(x[a], name + a + del.. 더보기
[python] poetry 설치 시스템 요구사항: - Poetry requires Python 2.7 or 3.5+. - It is multi-platform and the goal is to make it work equally well on Windows, Linux and OSX. osx / linux / bashonwindows 설치 명령어: curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python - windows powershell 설치 명령어: (Invoke-WebRequest -Uri https://raw.githubusercontent.com/python-poetry/poetry/master/get-poet.. 더보기
[PySpark] 연산자 우선순위 이슈 - 'py4j.Py4JException: Method or([class java.lang.Integer]) does not exist' pyspark에서 and, or, not에 대해서 다음과 같은 이슈가 발생할 수 있다 py4j.Py4JException: Method or([class java.lang.***]) does not exist py4j.Py4JException: Method and([class java.lang.***]) does not exist py4j.Py4JException: Method not([class java.lang.***]) does not exist 내 경우에는 다음과 같이 or를 사용하면서 발생 # 잘못된 코드 .filter(col('row_num')== 2 | col('row_cnt') == 1) 에러로그 py4j.Py4JException: Method or([class java.lang.Intege.. 더보기
[Python] 예약어, 키워드 (keywords, reserved word) 파이썬을 그냥 기존에 언어에서 알던 개념들을 굳이 확인해보지 않고 쓰고 있다가 최근에 바쁜일이 좀 줄어 기초부터 한 번 확인 하는 시간을 가지고 있다. 예약어의 경우 사용하다 보면 코드 에디터에서 syntax highlight가 생기는걸 보고 예약어구나 하면서 눈치껏 피해쓰긴 했지만 전부 정리해두면 좋을 것 같아 정리했다. 예약된 단어(키워드라고도 함)는 언어의 사전 정의된 의미와 구문을 사용하여 정의됩니다. 이 키워드들은 프로그래밍 명령어들을 개발하기 위해 사용되어야 한다. 예약된 단어는 변수 이름, 함수 등과 같은 다른 프로그래밍 요소의 식별자로 사용할 수 없습니다. 파이썬3(3.9 기준)에는 36개의 키워드가 있습니다. 아래 코드는 예약어 리스트를 확인하는 코드입니다. import keyword p.. 더보기
[Python] 파이썬 call by reference, call by value 언어를 처음 시작하면서 숙지 해야할 가장 중요한 내용이 바로 해당 언어의 'Memory Management', 'argument passing' 방식이다. C언어는 기본적으로 call by value이며 사용자가 포인터를 명시하여 사용하는 경우에만 call by reference로 동작한다. 하지만 이후 언어들은 C언어처럼 '포인터' 라는 개념 자체가 명시적으로 보이지 않는 경우가 많다. 그렇기 때문에 사용하는 언어의 메모리 사용 전략에 대한 이해가 매우 중요하다. Python은 간단하게 설명하면 - 변경 가능한 (Mutable) 타입은 call by reference : list, dictionary, setanduser-defined classes - 변경불가능한(Immutable) 타입은 call .. 더보기