2016-11-17 10 views
4

したがって、dask.dataframe.map_partitions()func引数とmeta kwargをとります。戻り値の型はどのくらい正確に決定されますか?例として:Python Dask - dataframe.map_partitions()戻り値

多くのcsvの... \ some_folderにあります。

ddf = dd.read_csv(r"...\some_folder\*", usecols=['ColA', 'ColB'], 
             blocksize=None, 
             dtype={'ColA': np.float32, 'ColB': np.float32}) 
example_func = lambda x: x.iloc[-1]/len(x) 
metaResult = pd.Series({'ColA': .1234, 'ColB': .1234}) 
result = ddf.map_partitions(example_func, meta=metaResult).compute() 

は、私は「分散」コンピューティングはかなり新しいんだけど、私は直感的に、これはシリーズオブジェクトのコレクション(リストや辞書、最も可能性が高い)を返すことを期待する、まだ結果はその可能性Seriesオブジェクトであります各パーティションでexample_funcの結果を連結したものとみなしてください。このシリーズ自体にパーティションラベルを示すMultiIndexがあれば、これだけでも十分です。 ddf.divisionsは、CSV形式のを読み取った結果として(None, None, ..., None)を返しますので、私はthis questionから伝えることができるものから、

docs、および the source code itselfが、これは何ですか?これを行うためのネイティブな方法がありますか、または返されたシリーズ(各パーティションの example_funcによって返されたシリーズの連結)を手動で入れて破る必要がありますか?

また、私がdaskするのが初めてのので、私の前提/慣行をここで修正してください。

答えて

2

したがって、dask.dataframe.map_partitions()は、func引数とメタkwargをとります。戻り値の型はどのくらい正確に決定されますか?

map_partition「インテリジェント」な方法でDASKのデータフレームまたはDASKシリーズオブジェクトのいずれかにfuncによって返される結果を連結しようとします。この決定は、funcの戻り値に基づいています。

  • funcがDASKのシリーズオブジェクトを返しますmap_partitionsスカラを返す場合。
  • funcがpd.Seriesオブジェクトを戻す場合、map_partitionは、funcによって戻されたすべてのpd.Seriesオブジェクトが連結されたdaskシリーズ・オブジェクトを戻します。
  • funcがpd.DataFrameを返した場合、map_partitionsは、これらのpd.DataFrameオブジェクトが最初の軸に沿って連結されたdask Dataframeオブジェクトを返します。

特殊パーティションの結果に興味がある場合は、get_partition()を使用できます。パーティションラベルが一般的に重要な情報である場合は、必要なすべての情報が含まれているcsvのデータを読み込んだ後、ddfの別の列を直接割り当てることを検討します。その後、funcを構築することができます。これは、1つの列に計算結果を含むpd.DataFrameと、別の列で結果を識別するために必要な情報を返す方法です。

+0

インジケータ列... duh!受け入れられました。 – StarFox