2016-07-17 5 views
2

join을 적용하면 예기치 않은 결과가 발생하여 .from_delayed 메소드에서 생성 된 데이터 프레임을 마스킹합니다. 다음 세 가지 부분으로 구성된 예제를 통해이를 증명하고 싶습니다.dask 데이터 프레임의 .join 결과가 방법에 의존하는 것처럼 보입니다. dask 데이터 프레임이 생성되었습니다.

  1. compute 방법 dataframes을 판다 양쪽 dataframes를 변환] from_delayed 방법을 통해 DASK dataframe를 생성 from_pandas
  2. 통해 생성 된 DASK dataframe 함께 조인. (1)에서와 같이 참여했습니다.
  3. from_delayed 메서드를 통해 생성 된 dask 데이터 프레임을 compute을 사용하는 팬더로 변환합니다. Aferwards는 from_pandas을 사용하여 다시 그것을 dask로 변환합니다. 그런 다음 (1)과 같이 참여하십시오.

    import dask.dataframe 
    import pandas as pd 
    
    # functions for generating a dask dataframe 
    def get_pdf(character): 
        '''constructs a pandas dataframe with indexes [character]1, ..., [character]5''' 
        index = [character + str(i) for i in range(5)] 
        return pd.DataFrame({'A':[1,2,3,4,5]}, index = index) 
    
    def get_ddf(): 
        '''constructs dask dataframe out of pandas dataframes via the .from-delayed method with indexes A1, A2, A3, ... F3, F3, F4''' 
        delayed_list = [dask.delayed(get_pdf)(x) for x in 'ABCDEF'] 
        return dask.dataframe.from_delayed(delayed_list) 
    
    #generate dask dataframes, that will be joined 
    ddf1 = get_ddf() 
    ddf2 = dask.dataframe.from_pandas(pd.DataFrame({'B': [1,2,3]}, index = ['A0', 'B1', 'C3']), npartitions = 2) 
    
    #recreate ddf1 by converting it to a pandas dataframe and afterwards to a dask dataframe 
    ddf1_from_pandas = dask.dataframe.from_pandas(ddf1.compute(), npartitions = 3) 
    
    #compute joins 
    dask_from_delayed_join = ddf1.join(ddf2, how = 'inner') 
    pandas_join = ddf1.compute().join(ddf2.compute(), how = 'inner') 
    dask_from_pandas_join = ddf1_from_pandas.join(ddf2, how = 'inner') 
    

    내가 동일하게 세 가지 결과 (dask_from_delayed_join, pandas_join, dask_from_pandas_join을) 기대 :

는 다음과 같은 코드를 생각해 보자.

그러나, 첫 번째 결과는 다른 다릅니다

print(dask_from_delayed_join.compute()) :

Empty DataFrame 
Columns: [A, B] 
Index: [] 

print(pandas_join) :

A B 
A0 1 1 
B1 2 2 
C3 4 3 

print(dask_from_pandas_join.compute()) :

A B 
A0 1 1 
B1 2 2 
C3 4 3 

무슨 일 이니?

+1

나는 이것을 지금보고 있습니다. 희망은 하루나 셋 이내에 대답을 가지고. – MRocklin

답변

2

실제로 dd.merge과 관련된 문제가있었습니다. 이것들은 dask 버전 0.10.2에서 해결되었습니다.

In [10]: print(dask_from_delayed_join.compute()) 
    A B 
A0 1 1 
B1 2 2 
C3 4 3 

In [11]: print(pandas_join) 
    A B 
A0 1 1 
B1 2 2 
C3 4 3 

In [12]: print(dask_from_pandas_join.compute()) 
    A B 
A0 1 1 
B1 2 2 
C3 4 3