2017-06-18 15 views
0

私は値のリストを作成する関数を持っています。データフレームから行が与えられたときに、そのような関数が行う可能性のあるものを単純化したものです。適用されたメソッドの結果の辞書を返すデータフレームのDaskメソッド

def generate_key_list_pair(row): 
    some_list = do_something_to_make_a_list(row) 
    return some_list 
私はその後、DASKのデータフレーム内のすべての行にその方法を適用し、辞書を返したい

ように:

ddf.apply(generate_key_list_pair) 

が...そのキー行IDた辞書を返しますし、それぞれの行からの結果は、例えば、機能を適用して、その値:n1はだろう

{ 
    1: [3.0, 4.12, 5.2, 23.1, 4.9], 
    ... 
    n: [9.34, 8.12, 3.42, 12.1, 34.2] 
} 

を各generate_key_list_pair関数呼び出しに渡された行オブジェクトからの列の値。

編集:1 ... nは元のデータフレームの列内に存在する一意の識別子です。

+1

クリアするには、1..nは各パーティション内の行インデックス値です(パーティションごとに繰り返されます)。 – mdurant

+1

それを聞いてくれてありがとう。 1 ... nは、データフレームの列内に存在する一意の識別子です。元の質問を編集して明確にすることができます。 – kuanb

答えて

1

applyのようなDask-Dataframeの方法では、一般的にデータフレームが戻ってきます。この場合は、後で行うことではありません。ただし、構成パンダのデータフレームにアクセスし、まだスケジューラ/パラレル操作を維持することができます。

def dict_from_part(df): 
    d2 = df.set_index('id_column').apply(do_something_to_make_a_list, axis=1) 
    # d2 is a series, so long as the number of elements of the lists 
    # isn't accidentally the same as the number of columns 
    return d2.to_dict() 

parts = [delayed(dict_from_part)(df) for df in ddf.to_delayed()] 

は今partsは、あなたが望むように辞書にcompute -dすることができ、それぞれがdelayedオブジェクトのリストです。これらの辞書を組み合わせたい場合は、代わりにタプル(items()など)を作成して合計する必要があります。

+0

ありがとうございます。そのコードが正しく理解されていれば、partsが呼び出されると、各要素がパーティションの1つを表すリストが返されます。あれは正しいですか? – kuanb

+1

はい、各要素は、元のデータフレームのパーティションの1つから生成された辞書へのハンドルです。 compute(各要素のメソッドであるか、リスト全体で 'dask.compute'を使うことができます)を呼び出すまで、計算は実際には起こりません。 – mdurant

関連する問題