データ ワークフローの一部として、dask データフレーム列のサブセットの値を変更し、結果をさらに計算するために渡す必要があります。特に、列のマッピングとパーティションのマッピングの 2 つのケースに興味があります。データを操作するための推奨される安全でパフォーマンスの高い方法は何ですか? 各ホストに複数のワーカープロセスがあるクラスターで分散セットアップを実行しています。
ケース1。
実行したい:
res = dataframe.column.map(func, ...)
これはデータ系列を返すので、元のデータフレームは変更されていないと仮定します。たとえば、列をデータフレームに戻すのは安全dataframe['column']=res
ですか? おそらくそうではありません。.copy()でコピーを作成し、結果を次のように割り当てる必要があります。
dataframe2 = dataframe.copy()
dataframe2['column'] = dataframe.column.map(func, ...)
それを行う他の推奨される方法はありますか?
ケース2
データフレームのパーティションをマップする必要があります:
df.map_partitions(mapping_func, meta=df)
mapping_func()内でpartition[column].map
、リスト内包表記を使用するか、単に作成することにより、選択した列の値を変更したいと考えています。繰り返しますが、パーティションを安全に変更し、マッピング関数から返すにはどうすればよいでしょうか?
マッピング関数によって受信されたパーティションは Pandas データフレーム (元のデータのコピーですか?) ですが、データをインプレースで変更しているときにクラッシュが発生します (ただし、例外/エラー メッセージは表示されません)。の呼び出しpartition.copy(deep=False)
にも同じことが言えますが、機能しません。パーティションをディープ コピーしてから、その場で変更する必要がありますか? または、新しい/マップされた列データと元の/変更されていないシリーズ/列から常に新しいデータフレームを構築する必要がありますか?