2

join.from_delayed メソッドによって生成された dask データフレームに適用すると、予期しない結果が得られました。これを次の例で示したいと思います。これは 3 つの部分で構成されています。

  1. メソッドを介してdaskデータフレームを生成し、それを介してfrom_delayed生成されたdaskデータフレームと結合しますfrom_pandas
  2. メソッドを使用して、両方のデータフレームを pandas データフレームに変換しますcompute。(1)のように参加した
  3. from_delayedメソッドを介して生成された dask データフレームを、 を使用して pandas に変換しcomputeます。Aferwards は、 を使用してそれを dask に戻しfrom_pandasます。次に、(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_join3 つの結果 ( 、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

何が起こっている?

4

1 に答える 1

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
于 2016-07-27T20:57:06.640 に答える