파이썬으로 parquet 파일을 읽어오면서 일정크기마다 텍스트로 저장하는 프로그램을 작성하였다. 그러면서
body += row.text + "\n"
같은 구문을 사용하였다. 나는 서버 개발자라서 이런 식의 구문을 사용했을 때 엄청 많이 반복적으로 사용하는 경우는 없었다. 그런데 이것은 집에서 하는 개인프로젝트로 엄청 큰 parquet 파일을 읽는 작업이라서 매우 큰 row.text 에 대해 반복적으로 하는 작업이었다.
그런데 프로그램을 동작시키자 매우 느리게 동작했다. 내 개인적인 느낌으로는 이게 그렇게 느린 만한 작업이 아니다고 생각해서 break 를 잡아가면서 테스트 해 보았다. body 가 커질 수록 느려지는 느낌이었다. 찾아보니 이런 case 는
items = []
for key, row in df.iterrows():
items.append(row.text)
"'\n'.join(items)
이런것을 추천하는 것으로 보았다.
자바에서의 StringBuffer 가 아닌 String 같은 느낌인 것 같다. 그러다보니 덧셈 연산이 발생할 때마다 메모리 공간 할당이 발생하는 것 같다. (정확한 것을 찾아 봐야한다. )
어째든 내 경우 StringIO 을 이용했다.
io_file = StringIO()
for key, row in df.iterrows():
io_file.write(row.text)
io_file.write("\n\n")
io_file.getvalue()
같이 수정해 보니 꽤 쓸만한 속도로 동작했다.