2017-12-11 3 views
0

나는 약 50 만 개의 행과 30000 개의 열을 가지고있는 팬더 데이터 프레임 data_pandas을 가지고 있습니다. 나는 이것이 스파크 dataframe data_spark에 있어야 할 내가 이것을 달성 : 나는 동일한 구성의 10 명 노동자와 함께 r3.8xlarge 드라이버 일하고pandas 데이터 프레임을 Spark 데이터 프레임으로 변환하는보다 효율적인 방법이 있습니까?

data_spark = sqlContext.createDataFrame(data_pandas) 

. 그러나 앞서 언급 한 작업은 영원히 소요되며 OOM 오류를 반환합니다. 시도 할 수있는 다른 방법이 있습니까?

원본 데이터가 HDF 형식이므로 Spark 데이터 프레임으로 직접 읽을 수 없습니다.

+0

이 변환 당신이 pyarrow https://arrow.apache.org/ – Dark

+0

내가 pyarrow를 사용하여 마루 형식으로 팬더를 저장하는 시도를 살펴해야 할 수도 있습니다,하지만 그 또한 나에게 제공하는 경우 30,000 개 이상의 열이있는이 대형 데이터 세트에 대한 OOM 오류 – technOslerphile

+0

데이터가 분할 되었습니까? 또는 마루에 저장할 때 데이터를 분할 할 수 있습니까? 또한 드라이버 또는 실행 프로그램에서 OOM 오류가 발생합니까? 로그에는 무엇이 있습니까? OOM이있는 위치를 알게되면 그에 따라 드라이버/실행 프로그램의 메모리 요구 사항을 조정할 수 있습니다. –

답변

0

한 가지 방법은 판다 데이터 프레임의 데이터를 한 번에 일괄 적으로 읽는 것일 수 있습니다. 한 가지 방법은 아래 코드를 사용하여 20 개의 청크로 나누는 것입니다 (herehere)

def unionAll(*dfs): 
    ' by @zero323 from here: http://stackoverflow.com/a/33744540/42346 ' 
    first, *rest = dfs # Python 3.x, for 2.x you'll have to unpack manually 
    return first.sql_ctx.createDataFrame(
     first.sql_ctx._sc.union([df.rdd for df in dfs]), 
     first.schema 
    ) 

df_list = [] 
for chunk in np.array_split(df1,20): 
    df_list.append(sqlContext.createDataFrame(chunk)) 

df_all = unionAll(df_list) 
관련 문제