DaskでPythonを劇的効率化

IT・プログラミング

DaskでPythonを劇的効率化

Daskとは?並列処理入門:大規模データ処理を効率化するPythonライブラリ

Daskは、Pythonで大規模なデータ処理を効率的に行うための並列計算ライブラリです。Pythonは通常、一度に一つの処理しか行えないため、大量のデータを扱う際に時間がかかります。Daskは、この問題を解決し、データ分析や機械学習の効率を劇的に向上させます。

Daskは、データを小さな塊(チャンク)に分割し、複数のCPUコアや計算機を使って並行して処理を行います。これにより、処理時間を大幅に短縮できます。数GB〜数百GBのCSVファイルを扱うデータ分析、機械学習モデルの学習、複雑なシミュレーションなど、時間がかかる処理を高速化することが可能です。

Daskのメリット:

  • 大規模データ処理: メモリに乗り切らないデータセットも効率的に処理できます。
  • 並列処理: 複数のCPUコアや計算機を最大限に活用し、処理を高速化します。
  • 使いやすさ: PandasやNumPyといった既存のPythonライブラリと連携しやすく、学習コストが低いのが特徴です。
  • スケーラビリティ: ローカル環境だけでなく、クラウド環境にも対応しており、データの規模や処理内容に応じて柔軟にスケールできます。

Daskのデメリット:

  • オーバーヘッド: 小規模なデータセットでは、並列処理のオーバーヘッドが無視できず、Pandasなど他のライブラリの方が効率的な場合があります。
  • 学習コスト: 並列処理の概念やDaskのAPIを理解する必要があります。
  • デバッグの複雑さ: 並列処理によるエラーは、原因の特定が難しい場合があります。

並列処理とは、複数の処理を同時に行うことで、コンピューターの処理能力を最大限に引き出す技術です。Daskは、この並列処理をPythonで簡単に行えるように設計されています。Daskを使うことで、プログラミングの知識が少ない人でも、大規模なデータ処理を効率的に行えるようになります。

Daskは、ローカル環境だけでなく、クラウド環境でも利用できます。そのため、データの規模や処理内容に応じて、最適な環境を選択できます。Daskは、データサイエンスの分野で広く利用されており、Pythonを使ったデータ分析の効率化に不可欠なツールとなっています。

Daskが特に効果を発揮するユースケース:

  • 大規模なログ分析: サーバーログやアクセスログなど、大量のテキストデータを効率的に分析できます。
  • 機械学習の前処理: 大規模なデータセットに対する特徴量エンジニアリングやデータクリーニングを高速化します。
  • 複雑なシミュレーション: 気象シミュレーションや金融モデリングなど、計算量の多い処理を高速化します。

Dask DataFrame/Array: Pandas/Numpyとの違い、遅延評価とタスクグラフ

Daskは、Pythonにおける大規模データ処理の効率化を目的としたライブラリです。特に、PandasやNumPyといった既存のデータ分析基盤と連携しやすく、これらのライブラリのスケールアップ版として機能します。このセクションでは、Dask DataFrameとPandas DataFrame、Dask ArrayとNumPy Arrayの違いに焦点を当て、Daskの重要な概念である遅延評価とタスクグラフについて解説します。

対象読者:

  • PandasやNumPyを使ったことがあるが、より大規模なデータを扱いたいと考えている方。
  • Pythonで並列処理を実装したいが、複雑なコードを書きたくない方。
  • Daskの基本的な概念を理解し、実際に使ってみたい方。

Dask DataFrame vs Pandas DataFrame

Pandas DataFrameは、データ分析において非常に強力なツールですが、メモリに乗り切らないような大規模データセットを扱う際には限界があります。一方、Dask DataFrameは、Pandas DataFrameのAPIをほぼそのまま利用できる分散処理版です。Dask DataFrameは、大規模なデータセットを複数の小さなチャンク(パーティション)に分割し、それぞれを独立して処理することで、メモリに乗り切らないデータセットでも効率的に処理できます。

Dask DataFrameの主な特徴:

  • 大規模データセットの処理: メモリに乗り切らないデータセットを分割して処理。
  • Pandas互換のAPI: Pandas DataFrameとほぼ同じAPIを使用可能。ただし、完全に互換ではない部分もあります。
  • 並列処理: 複数のコアやマシンを利用して処理を並列化。
  • 遅延評価: 計算を必要な時点まで遅らせ、効率的な実行計画を立てる。

例えば、100GBのCSVファイルを処理する場合、Pandasではメモリ不足になる可能性がありますが、Dask DataFrameを使用すれば、データをチャンクに分割し、並列処理によって高速に読み込み、分析できます。

Dask Array vs NumPy Array

NumPy Arrayは、数値計算において基本的なデータ構造ですが、Dask ArrayはNumPy Arrayを拡張し、大規模な数値計算を並列処理で行うことを可能にします。Dask Arrayも、データを複数のチャンクに分割し、それぞれのチャンクを独立して処理します。

Dask Arrayの主な特徴:

  • 大規模数値計算: NumPy Arrayでは扱えない大規模な配列を処理。
  • NumPy互換のAPI: NumPy Arrayとほぼ同じAPIを使用可能。
  • 並列処理: 複数のコアやマシンを利用して計算を並列化。
  • チャンクサイズ: チャンクサイズを調整することで、メモリ使用量と並列度を制御。

例えば、1TBの画像データを処理する場合、NumPyではメモリ不足になる可能性がありますが、Dask Arrayを使用すれば、画像をチャンクに分割し、並列処理によって効率的に処理できます。

遅延評価(Lazy Evaluation)

Daskの重要な特徴の一つが遅延評価です。遅延評価とは、計算を定義した時点では実行せず、実際に結果が必要になるまで遅らせるという仕組みです。Daskでは、compute()メソッドを呼び出すことで、遅延していた計算が実行されます。

遅延評価のメリット:

  • メモリ効率の向上: 中間結果を保持する必要がないため、メモリ使用量を削減。
  • 計算の最適化: タスクグラフ全体を分析し、効率的な実行計画を立てる。
  • 並列処理の効率化: 並列実行可能なタスクを自動的に抽出。

例えば、複数のDask DataFrameの操作を連続して行う場合、遅延評価によって、Daskはこれらの操作を一つのタスクグラフにまとめ、最適化された順序で実行します。

タスクグラフ

タスクグラフは、Daskが計算を表現するために使用するグラフ構造です。タスクグラフは、計算の依存関係をノードとエッジで表現します。各ノードは実行されるべきタスクを表し、エッジはタスク間の依存関係を表します。Daskスケジューラは、タスクグラフを解析し、並列実行可能なタスクを抽出し、効率的に実行します。

タスクグラフの例:

import dask.dataframe as dd

df = dd.read_csv('large_file.csv')
df = df[df['column_1'] > 100]
result = df.groupby('column_2').mean().compute()

上記のコードでは、read_csv、フィルタリング、groupbymeanなどの操作がタスクグラフとして表現されます。Daskスケジューラは、このタスクグラフを解析し、並列実行可能なタスクを抽出し、効率的に実行します。

タスクグラフを図解すると:

[ここにタスクグラフの図を挿入する]

  • ノード: 各処理(read_csv, フィルタリング, groupby, mean)を表します。
  • エッジ: 処理の依存関係(データの流れ)を表します。

まとめ

Dask DataFrameとDask Arrayは、Pandas DataFrameとNumPy Arrayを拡張し、大規模データ処理を可能にする強力なツールです。遅延評価とタスクグラフの概念を理解することで、Daskの能力を最大限に引き出し、効率的なデータ分析を行うことができます。次のセクションでは、Dask DataFrameを使ったデータ処理の実践的な例を見ていきましょう。

実践!Dask DataFrameによるデータ処理:コード例で学ぶDaskの基本操作

Dask DataFrameは、Pandas DataFrameとよく似たインターフェースを持ちながら、大規模なデータを効率的に処理できる強力なツールです。このセクションでは、Dask DataFrameを使ったデータの前処理、フィルタリング、集約といった基本的な操作を、具体的なコード例を交えながら解説します。Daskの利用方法を習得し、Pythonスキルを向上させましょう。

データの前処理

Dask DataFrameを使ったデータの前処理は、Pandasと非常によく似た構文で行えます。例えば、欠損値の処理やデータ型の変換などが可能です。

欠損値の処理

import dask.dataframe as dd
import pandas as pd

# Pandas DataFrameを作成
pd_df = pd.DataFrame({'A': [1, 2, None, 4, 5], 'B': ['a', 'b', 'c', None, 'e']})

# Dask DataFrameに変換
dask_df = dd.from_pandas(pd_df, npartitions=2)  # npartitionsで分割数を指定

# 欠損値を0で埋める
dask_df_filled = dask_df.fillna(0)

# 結果の確認 (compute()で実行)
print(dask_df_filled.compute())

実行結果:

   A  B
0  1  a
1  2  b
2  0  c
3  4  0
4  5  e

fillna()関数を使って、欠損値を指定した値で埋めることができます。npartitions引数は、Dask DataFrameをいくつのパーティションに分割するかを指定します。分割数を増やすほど並列処理の効果が期待できますが、多すぎるとオーバーヘッドが大きくなるため、データサイズや環境に合わせて調整が必要です。

npartitions引数の調整指針:

  • データサイズ: データサイズが大きいほど、分割数を増やすと効果的です。
  • CPUコア数: CPUコア数が多いほど、分割数を増やしてもオーバーヘッドが小さくなります。
  • 目安: 一般的には、データサイズをCPUコア数で割った値が、適切な分割数の目安となります。ただし、データの偏りがある場合は、調整が必要です。

データ型の変換

# データ型を変換する
dask_df_casted = dask_df.astype({'A': 'float64', 'B': 'object'})

# 結果の確認 (compute()で実行)
print(dask_df_casted.compute())

実行結果:

     A     B
0  1.0     a
1  2.0     b
2  NaN     c
3  4.0  None
4  5.0     e

astype()関数を使って、カラムのデータ型を変換できます。大規模なデータセットの場合、データ型を適切に設定することでメモリ使用量を削減し、パフォーマンスを向上させることができます。

注意: Pandas 2.0以降では、astype({'B': 'string'})はエラーになります。代わりにastype({'B': 'object'})を使用してください。

データのフィルタリング

Dask DataFrameでは、条件に基づいてデータを抽出することも簡単です。

# A列が2より大きい行を抽出
dask_df_filtered = dask_df[dask_df['A'] > 2]

# 結果の確認 (compute()で実行)
print(dask_df_filtered.compute())

実行結果:

     A     B
3  4.0  None
4  5.0     e

Pandasと同様に、[]の中に条件式を記述することで、条件に合致する行を抽出できます。Dask DataFrameでは、このフィルタリング処理も遅延評価されるため、実際にデータが処理されるのはcompute()が呼ばれたときです。

複数条件の組み合わせ

# A列が2より大きく、かつB列が'b'である行を抽出
dask_df_filtered = dask_df[(dask_df['A'] > 2) & (dask_df['B'] == 'b')]

# 結果の確認 (compute()で実行)
print(dask_df_filtered.compute())

実行結果:

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

複数の条件を組み合わせる場合は、&(AND)、|(OR)、~(NOT)などの演算子を使用します。各条件は()で囲む必要があります。

データの集約

Dask DataFrameでは、groupby()を使ってデータを集約し、統計量を計算することも可能です。

# B列でグループ化し、A列の平均値を計算
dask_df_grouped = dask_df.groupby('B')['A'].mean()

# 結果の確認 (compute()で実行)
print(dask_df_grouped.compute())

実行結果:

B
a    1.0
b    2.0
c    0.0
e    5.0
Name: A, dtype: float64

groupby()関数でグループ化するカラムを指定し、['A'].mean()のように集計関数を適用します。Dask DataFrameは、大規模なデータセットに対するグループ化と集計処理を効率的に実行できます。

複数の集計関数を適用

# 複数の集計関数を適用する例
dask_df_grouped = dask_df.groupby('B').agg({'A': ['mean', 'max']})

# 結果の確認 (compute()で実行)
print(dask_df_grouped.compute())

実行結果:

       A
    mean  max
B          
a  1.0  1.0
b  2.0  2.0
c  0.0  0.0
e  5.0  5.0

agg()関数を使うと、複数の集計関数を一度に適用できます。辞書形式で、集計対象のカラムと適用する集計関数を指定します。

まとめ

このセクションでは、Dask DataFrameを使ったデータの前処理、フィルタリング、集約といった基本的な操作を解説しました。これらの操作は、Pandas DataFrameと非常によく似た構文で記述できるため、Pandasの知識があれば比較的簡単にDask DataFrameを使いこなせるはずです。Dask DataFrameを活用することで、これまでメモリの制約で処理できなかった大規模なデータセットも、効率的に分析できるようになります。次のセクションでは、Daskスケジューラの設定とDask Boardによるモニタリングについて解説します。

次のステップ:

  • Dask DataFrameを使って、実際に大規模なデータセットを処理してみましょう。
  • Daskのドキュメントを読んで、より高度な機能について学習しましょう。
  • Dask Boardを使って、処理のパフォーマンスをモニタリングしてみましょう。

Daskスケジューラ設定とDask Boardによるモニタリング:Daskのパフォーマンスを最大化する

Daskの真価を発揮させるには、適切なスケジューラの設定と、処理状況のモニタリングが不可欠です。このセクションでは、Daskスケジューラの種類と設定方法、そしてDask Boardを使ったモニタリングについて解説します。

Daskスケジューラの種類

Daskには、主に以下の3種類のスケジューラがあります。

  • Threaded Scheduler: シングルマシン上で、スレッドを用いて並列処理を行います。デフォルトのスケジューラであり、手軽に並列処理を試したい場合に適しています。I/Oバウンドな処理に向いています。
  • Process Scheduler: シングルマシン上で、プロセスを用いて並列処理を行います。PythonのGILによる制約を受けにくいため、CPUバウンドな処理に向いています。ただし、スレッドスケジューラよりもオーバーヘッドが大きくなる場合があります。
  • Distributed Scheduler: 複数のマシンで構成されたクラスタ上で、分散処理を行います。大規模なデータセットや複雑な計算を処理する場合に最適です。

どのスケジューラを選ぶべきかは、処理の内容や利用可能なリソースによって異なります。一般的には、シングルマシンで手軽に試す場合はThreaded Scheduler、CPUバウンドな処理の場合はProcess Scheduler、大規模な分散処理の場合はDistributed Schedulerを選択します。

スケジューラの設定方法

スケジューラの設定方法はいくつかあります。

  1. グローバル設定: dask.config.set(scheduler='...') で、グローバルにスケジューラを設定できます。これは、プログラム全体でスケジューラを切り替えたい場合に便利です。
import dask
dask.config.set(scheduler='threads') # スレッドスケジューラを設定
  1. コンテキストマネージャー: dask.config.setwith ステートメントと組み合わせて、特定のコードブロック内でのみスケジューラを変更できます。
import dask
with dask.config.set(scheduler='processes'):
    # このブロック内ではプロセススケジューラが使用される
    result = dask_dataframe.mean().compute()
# ここからはグローバル設定が有効
  1. compute メソッドの引数: compute メソッドの scheduler 引数で、個々の計算ごとにスケジューラを指定できます。最も柔軟な設定方法です。
result = dask_dataframe.mean().compute(scheduler='threads') # スレッドスケジューラを使用
  1. 環境変数: DASK_SCHEDULER 環境変数を設定することでも、スケジューラを指定できます。これは、プログラムを実行する環境に合わせてスケジューラを切り替えたい場合に便利です。
export DASK_SCHEDULER=threads # スレッドスケジューラを設定
python your_script.py

Dask Boardによるモニタリング

Dask Boardは、Daskの処理状況をリアルタイムにモニタリングできる便利なツールです。タスクの実行状況、CPU/メモリ使用率、ネットワークI/Oなどを可視化し、ボトルネックの特定やパフォーマンスチューニングに役立ちます。

Dask Boardを起動するには、まずDask Clientを起動します。

from dask.distributed import Client

client = Client(n_workers=4) # 4つのワーカーを起動
client # Dask Boardへのリンクが表示される

Clientを起動すると、Dask Boardへのリンクが表示されます。ブラウザでこのリンクを開くと、Dask Boardの画面が表示されます。

Dask Boardへのリンクが表示されない場合:

  • Jupyter Notebookなどの環境によっては、Dask Boardへのリンクが自動的に表示されない場合があります。その場合は、以下の手順でDask BoardのURLを確認できます。
    1. client.dashboard_linkを実行する。
    2. 表示されたURLをブラウザで開く。

Dask Boardでは、以下の情報を確認できます。

  • Progress: タスクの進捗状況をグラフで表示します。
  • Task Stream: 個々のタスクの実行時間や依存関係を表示します。
  • CPU: CPU使用率を表示します。
  • Memory: メモリ使用率を表示します。
  • Network: ネットワークI/Oを表示します。
  • Info: Daskクラスタの情報(ワーカー数、メモリ容量など)を表示します。

Dask Boardを活用することで、処理のボトルネックを特定し、スケジューラの設定やデータ構造の最適化など、パフォーマンスチューニングのための手がかりを得ることができます。

Dask Boardでパフォーマンスのボトルネックを特定する方法:

  • CPU使用率が低い場合: 並列度が不足している可能性があります。ワーカー数を増やしたり、データセットの分割数を調整したりすることで、パフォーマンスを改善できる可能性があります。
  • メモリ使用率が高い場合: チャンクサイズを小さくしたり、不要なデータを削除したりすることで、メモリ不足を防ぐことができます。
  • Task Streamで特定のタスクの実行時間が長い場合: そのタスクがボトルネックになっている可能性があります。タスクの処理内容を見直したり、使用するアルゴリズムを変更したりすることで、パフォーマンスを改善できる可能性があります。

マルチマシン環境の構築

Distributed Schedulerを使用するには、Daskクラスタを構築する必要があります。Daskクラスタは、ローカルマシンまたはクラウド上に構築できます。

  • ローカルマシン: dask.distributed.LocalCluster を使用して、ローカルマシン上にDaskクラスタを構築できます。これは、開発環境やテスト環境での利用に適しています。
  • クラウド: AWS、GCP、Azureなどのクラウドプラットフォーム上で、Daskクラスタを構築できます。各プラットフォームが提供するマネージドDaskサービスを利用することもできます。

クラウド環境でのDaskクラスタ構築例:

  • AWS: AWS Batch、AWS Glue、Amazon EMRなどでDaskクラスタを構築できます。
  • GCP: Google Cloud Dataflow、Google Cloud DataprocなどでDaskクラスタを構築できます。
  • Azure: Azure Data Factory、Azure DatabricksなどでDaskクラスタを構築できます。

Daskクラスタを構築したら、Dask Clientを設定して、クラスタに接続します。

from dask.distributed import Client

client = Client('your_scheduler_address:8786') # スケジューラのアドレスを指定

Dask Clientを設定することで、ローカルマシンからDaskクラスタにアクセスし、分散処理を実行できます。

まとめ

Daskスケジューラの設定とDask Boardによるモニタリングは、Daskのパフォーマンスを最大限に引き出すために重要な要素です。処理の内容や利用可能なリソースに応じて適切なスケジューラを選択し、Dask Boardを活用して処理状況をモニタリングすることで、効率的な大規模データ処理を実現できます。

次のステップ:

  • Dask Boardを使って、実際の処理のパフォーマンスをモニタリングしてみましょう。
  • Daskクラスタを構築して、分散処理を試してみましょう。
  • Daskのドキュメントを読んで、より高度なスケジューリングやモニタリングの方法について学習しましょう。

Dask利用時の注意点とトラブルシューティング:大規模データ処理を成功させるために

Daskの利用は、大規模データ処理を効率化する強力な手段ですが、その特性を理解し、注意深く扱う必要があります。ここでは、Dask利用時の注意点、メモリ管理、エラー処理、パフォーマンスチューニングのヒントを紹介します。

メモリ管理

Daskは、データをチャンクに分割して処理するため、メモリに乗り切らない大規模なデータセットを扱えます。しかし、不適切な設定はメモリ不足を引き起こす可能性があります。以下の点に注意しましょう。

  • チャンクサイズの調整: チャンクサイズが小さすぎるとオーバーヘッドが大きくなり、大きすぎるとメモリに乗り切らなくなる可能性があります。適切なサイズはデータの種類や処理内容によって異なるため、試行錯誤が必要です。
    チャンクサイズの目安: 一般的には、チャンクサイズを数MB〜数百MB程度に設定するのが適切です。ただし、データの種類や処理内容によって最適なサイズは異なるため、実際に試してみて、パフォーマンスを比較検討することをおすすめします。
  • 不要なデータの削除: 中間結果など、不要になったデータは積極的に削除しましょう。del文を使うか、dask.persistで明示的に永続化されたデータはunpersistメソッドで削除できます。
  • persistの活用: 頻繁にアクセスするデータは、persistメソッドでメモリに保持することで、再計算のコストを削減できます。ただし、メモリ使用量には注意が必要です。

エラー処理

Daskは遅延評価を行うため、エラーが発生するタイミングが予測しにくい場合があります。以下の点に注意しましょう。

  • try-exceptブロック: dask.delayedでラップされた関数内でエラーが発生する可能性がある場合は、try-exceptブロックで例外をキャッチし、適切に処理しましょう。
  • タスクグラフのデバッグ: Dask Boardを活用して、タスクの実行状況をモニタリングし、エラーが発生したタスクを特定しましょう。dask.visualizeでタスクグラフを可視化することも有効です。
Daskで発生しやすいエラーの例:

  • OutOfMemoryError: メモリ不足が発生した場合に発生します。チャンクサイズを小さくしたり、不要なデータを削除したりすることで、解決できる場合があります。
  • TypeError: データ型が一致しない場合に発生します。astype関数を使って、データ型を適切に変換することで、解決できる場合があります。
  • KeyError: 存在しないキーにアクセスした場合に発生します。データにキーが存在するかどうかを確認したり、fillna関数を使って欠損値を補完したりすることで、解決できる場合があります。
エラー発生時の対処法:

  1. エラーメッセージをよく読む: エラーメッセージには、エラーの原因や解決策に関する情報が含まれている場合があります。
  2. Dask Boardでタスクの実行状況を確認する: エラーが発生したタスクを特定し、そのタスクの処理内容や依存関係を確認します。
  3. dask.visualizeでタスクグラフを可視化する: タスクグラフを可視化することで、エラーの原因となっているタスクやデータの流れを特定しやすくなります。
  4. GoogleやStack Overflowで検索する: Daskのエラーに関する情報は、インターネット上にたくさん存在します。エラーメッセージやエラーの内容で検索してみると、解決策が見つかる場合があります。

パフォーマンスチューニング

Daskのパフォーマンスは、スケジューラの種類、データ局所性、計算グラフの最適化など、様々な要因に影響されます。以下の点に注意しましょう。

  • スケジューラの選択: シングルマシン環境では、threadedスケジューラがデフォルトですが、I/Oバウンドな処理ではprocessスケジューラが適している場合があります。マルチマシン環境では、distributedスケジューラを使用します。
  • データ局所性の考慮: 計算を行うワーカーに近い場所にデータを配置することで、データ転送のコストを削減できます。dask.dataframe.repartitionでデータのパーティションを調整したり、dask.persistでデータを特定のワーカーに永続化したりできます。
  • 計算グラフの最適化: Daskは自動的に計算グラフを最適化しますが、複雑な処理の場合は、手動で最適化することでパフォーマンスを向上させることができます。dask.optimize関数を使用したり、不要な計算を削除したりできます。

Dask利用時の注意点

Daskは強力なツールですが、万能ではありません。以下の点に注意しましょう。

  • Daskが適さないケース: 小規模なデータセットや、複雑すぎる処理にはDaskは適していません。データフレームが簡単にRAMに収まる場合は、Pandasなどのライブラリを使用する方が効率的な場合があります。
  • GIL (Global Interpreter Lock) の影響: PythonのGILは、マルチスレッド環境での並列処理を制限します。DaskはGILを回避する仕組みを備えていますが、完全に回避できるわけではありません。CPUバウンドな処理では、processスケジューラを使用することで、GILの影響を軽減できます。

Dask-cuDFを使用する際の注意点

Dask-cuDFは、GPUを利用した高速なデータ処理を可能にするライブラリですが、以下の点に注意が必要です。

  • GPUの搭載: Dask-cuDFを使用するには、GPUが搭載された環境が必要です。
  • cuDFとの互換性: Dask-cuDFは、cuDFのAPIを拡張したものです。cuDFのバージョンとDask-cuDFのバージョンが一致していることを確認してください。
  • メモリ管理: GPUのメモリは、CPUのメモリよりも容量が少ない場合があります。Dask-cuDFを使用する際は、GPUのメモリ使用量に注意してください。

Daskを効果的に活用するためには、これらの注意点を理解し、状況に応じて適切な設定やチューニングを行うことが重要です。

次のステップ:

  • Daskを使って、実際のデータ処理を行ってみましょう。
  • Dask Boardを使って、処理のパフォーマンスをモニタリングしてみましょう。
  • Daskのドキュメントを読んで、より高度な機能について学習しましょう。

コメント

タイトルとURLをコピーしました