- dataframe에서
apply
의 수행시간이 매우 느리다면 여러개의 프로세스를 사용해 처리하는 방법을 고려해보는게 좋다. multiprocessing.cpu_count()
을 통해 cpu 코어의 수를 가져올 수 있다.- 코어수를 가져오고
udf
를 생성했다면 아래와 같이 구현하면 된다.
def text_preprocessing(df):
# df['pre_context'] = df.progress_apply(preprocessing_udf, axis=1) # 다음과같이 진행상황을 출력하고 싶었으나 화면에 이상하게 출력됨
df['p_context'] = df.apply(preprocessing_udf, axis=1)
return df
from multiprocessing import Pool
import multiprocessing
print ('cpu counts: %d' % multiprocessing.cpu_count())
def parallelize_dataframe(df, func, n_cores=8):
df_split = np.array_split(df, n_cores) # core의 개수로 df를 나눈다.
pool = Pool(n_cores) # pool을 cpu 코어 개수 만큼 생성하고
df = pd.concat(pool.map(func, df_split)) # 나눠진 df를 func으로 넘겨서 수행한다.
pool.close()
pool.join() # 모두가 완료될때까지 대기
return df
result_sample = parallelize_dataframe(result_df, text_preprocessing)
- 코어의 개수에따라 linear하게 성능이 증가하진 않지만 상당한 성능 향상에 기여할 수 있음
- 참고
'우리는 개발자 > Data Science' 카테고리의 다른 글
[Pandas] DataFrame Groupby Apply UDF 작성 (0) | 2019.09.06 |
---|---|
[Pandas] DataFrame apply udf를 이용할때 여러개의 컬럼을 넘기고 받는 방법 (multiple columns apply udf) (0) | 2019.09.06 |
[Pandas] 에서 apply의 얼마나 처리되었는지 진행상황을 확인하는 방법 (tqdm 사용) (0) | 2019.09.06 |
[Pandas] DataFrame 필터링과 동시에 데이터 읽기 (chunksize, iterator=True) (0) | 2019.09.06 |
[Ipython/JupyterNotebook] Linux 환경변수 추가/설정 하는 방법 (PYTHONPATH, LD_LIBRARY_PATH) (0) | 2019.09.04 |