Alibaba Cloud MaxCompute SDK for Python(PyODPS)DataFrame は、各操作の実行プロセスを最適化します。可視化機能を使用して、デバッグのために計算プロセス全体を表示できます。
DataFrame の可視化
DataFrame の可視化は、graphviz と Python 用の graphviz パッケージに依存します。
>>> df = iris.groupby('name').agg(id=iris.sepalwidth.sum())
>>> df = df[df.name, df.id + 3]
>>> df.visualize()
計算プロセスは、PyODPS DataFrame が groupby
操作と列フィルタリング操作を組み合わせていることを示しています。
>>> df = iris.groupby('name').agg(id=iris.sepalwidth.sum()).cache()
>>> df2 = df[df.name, df.id + 3]
>>> df2.visualize()
キャッシュ操作が実行されるため、実行プロセス全体は 2 つのステップで実行されます。
MaxCompute SQL バックエンドでのコンパイル結果の表示
compile
メソッドを呼び出して、MaxCompute SQL バックエンドでの SQL 文のコンパイル結果を表示します。
>>> df = iris.groupby('name').agg(sepalwidth=iris.sepalwidth.max())
>>> df.compile()
Stage 1:
SQL compiled:
SELECT
t1.`name`,
MAX(t1.`sepalwidth`) AS `sepalwidth`
FROM test_pyodps_dev.`pyodps_iris` t1
GROUP BY
t1.`name`
pandas 計算バックエンドを使用したローカルデバッグの実行
MaxCompute テーブルを DataFrame オブジェクトのソースとして使用する場合、システムは MaxCompute SQL バックエンドで一部の操作をコンパイルまたは実行しません。代わりに、システムは MaxCompute Tunnel サービスを使用してデータをダウンロードします。このようにして、システムは MaxCompute SQL バックエンドがダウンロードタスクをスケジュールするのを待つ必要がありません。これにより、少量のデータを MaxCompute からローカルディレクトリにダウンロードし、pandas 計算バックエンドを使用してコードをコンパイルおよびデバッグできます。次のデバッグ操作を実行できます。
パーティション化されていないテーブルからすべてまたは一部のデータ行を選択するか、列データをフィルタリングし、指定された行数を計算します。列フィルタリング操作は、列値を計算しません。
パーティションテーブルで指定されたすべてまたは最初のいくつかのパーティション列からすべてまたは一部のデータ行を選択するか、列データをフィルタリングし、指定された行数を計算します。
iris
DataFrame オブジェクトが、パーティション化されていない MaxCompute テーブルをソースとして使用しているとします。次の操作では、MaxCompute Tunnel サービスを使用してデータをダウンロードします。
>>> iris.count()
>>> iris['name', 'sepalwidth'][:10]
DataFrame オブジェクトが、ds
、hh
、および mm
パーティションフィールドを含むパーティションテーブルを使用しているとします。次の操作では、MaxCompute Tunnel サービスを使用してデータをダウンロードします。
>>> df[:10]
>>> df[df.ds == '20160808']['f0', 'f1']
>>> df[(df.ds == '20160808') & (df.hh == 3)][:10]
>>> df[(df.ds == '20160808') & (df.hh == 3) & (df.mm == 15)]
この場合、to_pandas
メソッドを使用して、デバッグのためにデータをローカルディレクトリにダウンロードできます。
>>> DEBUG = True
>>> if DEBUG:
>>> df = iris[:100].to_pandas(wrap=True)
>>> else:
>>> df = iris
コンパイルの最後に、DEBUG
を False に設定して、MaxCompute での計算を完了します。
サンドボックスの制限により、ローカルデバッグを通過する一部のプログラムは MaxCompute で実行できない場合があります。