すべてのプロダクト
Search
ドキュメントセンター

:MaxCompute Python UDFに関するFAQ

最終更新日:Jan 07, 2025

このトピックでは、Pythonで記述されたMaxComputeユーザー定義関数 (UDF) に関するよくある質問に対する回答を提供します。

クラスとリソース

次のクラスまたはリソースの問題が発生する可能性があります。

  • 問題の説明1:MaxCompute UDFを呼び出すと、次のエラーメッセージが報告されます。関数 'xxx' は解決できません.

    • 考えられる原因:

      • 原因1: 使用するプロジェクトは、MaxCompute UDFが登録されているプロジェクトではありません。 たとえば、開発プロジェクトにMaxCompute UDFを登録し、本番プロジェクトでMaxCompute UDFを呼び出すと、エラーが報告されます。

      • 原因2: MaxCompute UDFのクラスまたはリソースが無効です。

      • 原因3: MaxCompute UDFが依存するリソースのタイプが無効です。 たとえば、PY型のPythonファイルをアップロードします。 ただし、MaxCompute UDFコードのget_cache_fileには、FILEタイプのリソースが必要です。

      • 原因4: MaxCompute UDFが依存するリソースのデータが最新ではありません。 DataWorksを使用してリソースをMaxComputeにアップロードすると、遅延が発生する可能性があります。 この場合、MaxCompute UDFが依存するリソースのデータは最新ではありません。

      • 原因5: Pythonバージョンはサポートされていません。 デフォルトでは、MaxComputeはPython 2を使用してジョブを実行します。 PythonコードにASCII以外の文字が存在する場合、コードを実行するとエラーが報告されます。

    • 解決策:

      • 解決策1: MaxComputeクライアントで、エラーが報告されたプロジェクトでlist functions; コマンドを実行します。 MaxCompute UDFがコマンド出力に含まれていない場合、プロジェクトはMaxCompute UDFが登録されているプロジェクトではありません。 MaxCompute UDFが登録されているプロジェクトに移動し、MaxCompute UDFを再度呼び出します。

      • 解決策2: MaxComputeクライアントで、desc関数 <function_name>; コマンドを実行し、コマンド出力のClassResourcesの値を確認します。

        ClassまたはResourcesパラメーターの値が無効な場合は、create function <function_name> as <'package_to_class '> using <'resource_list'>; コマンドを実行して、UDFを再度登録します。 Pythonスクリプト名でpackage_to_classパラメーターを設定します。クラス名形式。 resource_listパラメーターを使用して、ファイル、テーブル、圧縮パッケージ、サードパーティパッケージなど、MaxComputeで参照するすべてのリソースを指定します。

        関数を登録する方法の詳細については、「UDFの作成」をご参照ください。

      • 解決策3: MaxComputeクライアントで、desc resource <resource_name>; コマンドを実行します。 コマンド出力のtypeパラメーターで指定されたリソースタイプが有効かどうかを確認します。 リソースタイプが無効な場合は、add <file_type> <file_name>; コマンドを実行してリソースを再度アップロードします。

        • MaxCompute UDFコードで使用されているリソース参照メソッドがget_cache_fileの場合、ファイルが参照され、リソースタイプはfileである必要があります。

        • MaxCompute UDFコードで使用されているリソース参照方法がget_cache_tableの場合、テーブルが参照され、リソースタイプはtableである必要があります。

        • MaxCompute UDFコードで使用されているリソース参照メソッドがget_cache_archiveの場合、圧縮されたパッケージが参照され、リソースタイプはARCHIVEである必要があります。

        リソースのアップロード方法の詳細については、「リソースの追加」をご参照ください。

      • 解決策4: MaxComputeクライアントで、desc resource <resource_name>; コマンドを実行します。 コマンド出力のLastModifiedTimeパラメーターの値に基づいて、リソースデータが最新かどうかを確認します。 MaxCompute UDFで最新のリソースを使用する必要があります。

      • 解決策5: #coding: utf-8または# -*- coding: utf-8 -*- をPythonコードヘッダーに追加して、エンコード形式を宣言します。 MaxCompute UDFの呼び出しに使用されるsql文の前にset odps. SQL. python.version=cp37; コマンドを追加し、SQL文と一緒にコマンドを送信することもできます。 このように、Python 3はジョブの実行に使用されます。

  • 問題の説明2:でMaxCompute UDFを呼び出すと、get_cache_archive ('xxx.zip ')が設定されている場合、次のいずれかのエラーが報告されます。IOError: ダウンロードリソース: xxx.zipに失敗しました,odps.distcache.DistributedCacheError、およびfuxi job failed: ダウンロードリソース失敗: xxx.zip.

    • 考えられる原因:

      • 原因1: 圧縮パッケージが存在しません。 MaxCompute UDFを登録するときは、コマンドで圧縮パッケージを指定しません。

      • 原因2: 圧縮パッケージのリソースタイプがARCHIVEではありません。

      • 原因3: コード内のパッケージ名またはファイル名拡張子が実際のパッケージ名またはファイル名拡張子と一致していません。 たとえば、xxx.zipはコードで指定されていますが、アップロードされたファイルはxxx.tar.gzです。 この場合、パッケージはZIP形式で解凍されます。 その結果、解凍は失敗し、エラーが報告される。

      • 原因4: 同じジョブにある2つのUDFは、同じ名前のリソースに依存しています。 ただし、リソースはさまざまなプロジェクトに存在します。

    • 解決策:

      • 解決策1: MaxComputeクライアントで、desc function <function_name>; コマンドを実行します。 コマンド出力のResourcesパラメーターの値に、エラーメッセージに圧縮パッケージの名前が含まれているかどうかを確認します。

        圧縮パッケージの名前が存在しない場合は、create function <function_name> as <'package_to_class '> using <'resource_list'>; コマンドを実行して、MaxCompute UDFを再度登録します。 コマンドのresources_listパラメーターに圧縮パッケージの名前を追加します。

        関数を登録する方法の詳細については、「UDFの作成」をご参照ください。

      • 解決策2: MaxComputeクライアントで、desc resource <resource_name>; コマンドを実行します。 コマンド出力のTypeパラメーターの値がARCHIVEかどうかを確認します。

        Typeパラメーターの値がARCHIVEでない場合は、add archive <file_name>; コマンドを実行して、圧縮パッケージを再度アップロードします。

        リソースのアップロード方法の詳細については、「リソースの追加」をご参照ください。

      • 解決策3: MaxComputeクライアントで、desc function <function_name>; コマンドを実行します。 コマンド出力のResourcesパラメーターの値のパッケージ名とファイル名拡張子が、実際のパッケージ名とファイル名拡張子と一致しているかどうかを確認します。

        コマンド出力のパッケージ名またはファイル名拡張子が実際のパッケージ名またはファイル名拡張子と一致しない場合は、add archive <file_name>; コマンドを実行して圧縮パッケージを再度アップロードします。 file_nameパラメーターを、実際のパッケージ名およびファイル名拡張子と一致する値に設定します。

      • 解決策4: ビューが依存するUDFを含め、ジョブが依存するすべてのUDFをトラブルシューティングします。 UDFが属するプロジェクトと、UDFに対応するリソースを確認します。 同じ名前のリソースが異なるプロジェクトに存在する場合は、ジョブが依存するUDFを変更するか、リソース名を変更することを推奨します。

  • 問題の説明3: get_cache_table(table_name) が設定されているMaxCompute UDFを呼び出すと、次のエラーメッセージが報告されます。odps.distcache.DistributedCacheError: テーブルリソース "xxx_table_name" not found.

    • 考えられる原因:

      • 原因1: テーブルが存在しません。 MaxCompute UDFを登録するときは、コマンドでテーブルを指定しません。

      • 原因2: テーブルのリソースタイプがtableではありません。

    • 解決策:

      • 解決策1: MaxComputeクライアントで、desc function <function_name>; コマンドを実行します。 コマンド出力のResourcesパラメーターの値に、エラーメッセージのテーブル名が含まれているかどうかを確認します。

        テーブルの名前が存在しない場合は、create function <function_name> as <'package_to_class '> using <'resource_list'>; コマンドを実行して、MaxCompute UDFを再度登録します。 コマンドのresource_listパラメーターにテーブルの名前を追加します。

        関数を登録する方法の詳細については、「UDFの作成」をご参照ください。

      • 解決策2: MaxComputeクライアントで、desc resource <resource_name>; コマンドを実行します。 コマンド出力のTypeパラメーターの値がTABLEかどうかを確認します。

        Typeパラメーターの値がTABLEでない場合は、add table <table_name>; コマンドを実行して、テーブルを再度アップロードします。

        リソースのアップロード方法の詳細については、「リソースの追加」をご参照ください。

  • 問題の説明4: サードパーティパッケージを参照するMaxCompute UDFを呼び出すと、次のエラーメッセージが報告されます。ImportError: 'xxx' という名前のモジュールがありません

    • 考えられる原因:

      • 原因1: サードパーティパッケージのリソースタイプがARCHIVEではありません。

      • 原因2: MaxCompute UDFを登録する際、コマンドでサードパーティパッケージを指定しません。

      • 原因3: MaxCompute UDFコードでサードパーティパッケージのパスを指定していません。

      • 原因4: サードパーティパッケージはWHEELファイルですが、ファイル名拡張子が無効です。 Pythonバージョンに基づいてWHEELファイルをダウンロードする必要があります。

      • 原因5: サードパーティパッケージはWHEELファイルまたは純粋なPythonパッケージではありませんが、パッケージにはsetup.pyファイルが含まれています。

      • 原因6: MaxCompute UDFのPythonファイルの名前が、MaxCompute UDFによって参照されるサードパーティモジュールの名前と競合します。 たとえば、MaxCompute UDFのPythonファイルがA.pyの場合、コード内の "import A" は、サードパーティパッケージ内のモジュールではなく、A.pyファイルをインポートします。

    • 解決策:

      • 解決策1: MaxComputeクライアントで、desc resource <resource_name>; コマンドを実行します。 コマンド出力のTypeパラメーターの値がARCHIVEかどうかを確認します。

        Typeパラメーターの値がARCHIVEでない場合は、add archive <file_name>; コマンドを実行して、圧縮パッケージを再度アップロードします。

        リソースのアップロード方法の詳細については、「リソースの追加」をご参照ください。

      • 解決策2: MaxComputeクライアントで、desc function <function_name>; コマンドを実行します。 コマンド出力のResourcesパラメーターの値に、エラーメッセージにサードパーティパッケージの名前が含まれているかどうかを確認します。

        サードパーティパッケージの名前が存在しない場合は、create function <function_name> as <'package_to_class '> using <'resource_list'>; コマンドを実行して、MaxCompute UDFを再度登録します。 コマンドのresources_listパラメーターにサードパーティパッケージの名前を追加します。

        関数を登録する方法の詳細については、「UDFの作成」をご参照ください。

      • 解決策3: サードパーティパッケージのパスが、MaxCompute UDFコードのsys.path.insert(0, 'work/third-party package path') で設定されているかどうかを確認します。 たとえば、モジュール名はA、PythonファイルはA.pyです。 次の例は、コードで構成する必要があるパスを決定する方法を示しています。

        • 例1: Pythonファイルはresource_dirフォルダーにあり、このフォルダーはresource-of-A.zipパッケージに圧縮されます。 sys.path.insertで設定する必要があるパスは、work/resource-of-A.zip/resource_dir/ です。

        • 例2: Pythonファイルはresource_dirフォルダーにあり、このフォルダー内のすべてのファイルはresource-of-A.zipパッケージに圧縮されます。 sys.path.insertで設定する必要があるパスは、work/resource-of-A.zip/ です。

        • 例3: Pythonファイルはresource_dir/path1/path2フォルダーにあり、resource_dirフォルダー内のすべてのファイルはresource-of-A.zipパッケージに圧縮されます。 sys.path.insertで設定する必要があるパスは、work/resource-of-A.zip/path1/path2/ です。

        説明

        デフォルトでは、ARCHIVEタイプのリソースは相対パスに配置されます。. /仕事 /MaxCompute UDFの実行パスの

      • 解決策4: WHEELファイルはPythonのバージョンによって異なります。 Python 2を使用する場合は、名前にcp27-cp27m-manylinux1_x86_64が含まれるWHEELファイルをダウンロードする必要があります。 Python 3を使用する場合は、名前にcp37-cp37m-manylinux1_x86_64が含まれるWHEELファイルをダウンロードする必要があります。 ダウンロードしたWHEELファイルのファイル名拡張子を. zipに変更できます。 この方法では、WHEELファイルをZIPファイルにパッケージ化する必要はありません。

      • 解決策5: MaxComputeと互換性のあるPython環境で、setup.pyファイルをWHEELファイルにコンパイルします。 次に、リソースをアップロードし、MaxCompute UDFを登録します。 サードパーティパッケージをコンパイルする方法の詳細については、「コンパイルする必要があるサードパーティパッケージの参照」をご参照ください。

      • 解決策6: MaxCompute UDFのPythonファイルの名前を変更します。

  • 問題の説明5: 標準のPython 3ライブラリを参照するMaxCompute UDFを呼び出すと、次のエラーメッセージが報告されます。ImportError: enumという名前のモジュールはありません

    • 原因: MaxComputeプロジェクトでPython 3が有効になっていません。 デフォルトでは、Python 2はMaxCompute UDFの呼び出しに使用されます。 したがって、標準のPython 3ライブラリは識別できません。

    • 解決策: MaxCompute UDFを呼び出すために使用されるsql文の前に、set odps. SQL. python.version=cp37; コマンドを追加し、SQL文と一緒にコマンドを送信します。

  • 問題の説明6: MaxCompute UDFを呼び出すと、次のエラーメッセージが報告されます。ModuleNotFoundError: 'six' という名前のモジュールがありません

    • 原因: サードパーティのパッケージをPython UDFと一緒に使用すると、パッケージのパスがsys.pathに追加されません。 その結果、サードパーティパッケージはインポートできません。

    • 解決策: include_package_path ('six.zip ')sys.path.insert(0, 'work/six.zip') に変更します。 詳細については、「MaxCompute UDFでのScipyの実行」をご参照ください。

  • 問題の説明7: MaxCompute UDFを呼び出すと、xxx.pyからUdf情報を取得できませんでした

    • 原因: ユーザー定義テーブル値関数 (UDTF) またはユーザー定義集計関数 (UDAF) のコードでは、基本クラスのインポートに使用されるステートメントが無効です。 たとえば、import odps.udf.BaseUDTFまたはimport odps.udf.BaseUDAFを使用すると、エラーメッセージが表示されます。

    • 解決策: ステートメントをfrom odps.udf import BaseUDTFまたはfrom odps.udf import BaseUDAFに変更します。

パフォーマンス

  • 問題の説明: MaxCompute UDFを呼び出すと、次のエラーメッセージが報告されます: kInstanceMonitorTimeout

  • 原因: MaxCompute UDFのデータ処理がタイムアウトします。 デフォルトでは、UDFがデータを処理する期間は制限されています。 ほとんどの場合、UDFは1800秒以内に一度に1024行のデータを処理する必要があります。 この期間は、ワーカーが実行される合計期間ではなく、UDFが一度にデータレコードの小さなバッチを処理する期間です。 ほとんどの場合、MaxCompute SQLは1秒あたり10,000行以上のデータを処理できます。 この制限は、MaxCompute UDFの無限ループを防ぐことのみを目的としています。 無限ループが発生すると、CPUリソースが長時間占有されます。

  • 解決策:

    • ロギングに関する情報をMaxCompute UDFコードに追加します。 これにより、ログを表示して、無限ループが発生しているかどうかを確認できます。 また、ログに記録された時間情報に基づいて、MaxCompute UDFによる単一のレコードの処理時間が期待値を満たしているかどうかを確認できます。 ログに関する次の情報をコードに追加します。 ジョブの実行後、Logview UIStdOutでログを表示できます。

      • Python 2

        sys.stdout.write('your log')
        sys.stdout.flush()
      • Python 3

        print('your log', flush=True)
    • データ量が多い場合、MaxCompute UDFは長期間実行される可能性があります。 タイムアウトエラーを防ぐために、次のパラメーターを調整できます。

      パラメーター

      説明

      set odps.function.timeout=xxx;

      MaxCompute UDFのタイムアウト期間。 デフォルト値: 1800s。 このパラメーターは、ビジネス要件に基づいてより大きな値に設定できます。 有効な値: 1s ~ 3600s。

      set odps.sql.exe cutionengine.batch.rowcount=xxx;

      MaxCompute UDFが一度に処理するデータ行の数。 デフォルト値: 1024。 このパラメーターは、ビジネス要件に基づいて小さい値に設定できます。

ネットワーク

  • 問題の説明: MaxCompute UDFを呼び出してインターネットにアクセスすると、エラーが報告されます。

  • 原因: MaxCompute UDFはインターネットへのアクセスをサポートしていません。

  • 解決策: ビジネス要件に基づいて、ネットワーク接続申請フォームに記入して送信します。 MaxComputeテクニカルサポートチームは、ネットワーク接続を確立するために連絡します。 申請フォームへの記入方法の詳細については、「ネットワーク接続プロセス」をご参照ください。

サンドボックス

  • 問題の説明: MaxCompute UDFを呼び出すと、次のエラーメッセージが報告されます。RuntimeError: xxxはサンドボックスによってブロックされました

  • 原因: 一部のPython UDFの呼び出しは、サンドボックスによってブロックされます。

  • 解決策:

    • Python UDFの呼び出しに使用されるSQL文の前に、set odps.isolation.session.enable=true; コマンドを追加し、SQL文と一緒にコマンドを送信します。

    • デフォルトでは、Python 3 UDFの場合、odps.isolation.session.enableはtrueに設定されます。

Encoding

次のエンコードの問題が発生する可能性があります。

  • 問題の説明1: MaxCompute UDFを呼び出すと、次のエラーメッセージが表示されます。ファイルxxxのSyntaxError: 非ASCII文字 '\xe8' 。 ラインyyy.

    • 原因: MaxCompute UDFのPythonファイルにはASCII以外の文字が含まれており、Python 2で実行されます。

    • 解決策:

      • MaxCompute UDFの呼び出しに使用されるsql文の前に、set odps. SQL. python.version=cp37; コマンドを追加し、SQL文と一緒にコマンドを送信します。 このように、Python 3はジョブの実行に使用されます。

      • Pythonファイルの先頭に次の情報を追加します。 これにより、Python 2のデフォルトのエンコード形式がUTF-8に変更されます。

        import sys
        reload(sys)
        sys.setdefaultencoding('utf-8')
  • 問題の説明2: Python 2で記述されたMaxCompute UDFを呼び出すと、次のエラーメッセージが報告されます: UnicodeEncodeError: 'ascii 'code can't encode in position x-y: ordinal not in range(128)

    • 原因: 関数シグネチャで指定された戻り値の型はSTRINGです。 ただし、MaxCompute UDFはUNICODE型のPythonオブジェクトを返します。 たとえば、Pythonオブジェクトの名前がretの場合、MaxComputeはstr(ret) を使用して戻り値retをSTR型の値に変換します。 retがASCIIエンコード範囲内にある場合は、STR型に変換できます。 ただし、retがASCIIエンコード範囲内にない場合、変換は失敗し、エラーが報告されます。

    • 解決策: Pythonコードのevaluateメソッドに次のステートメントを追加します。

      return ret.encode('utf-8')
  • 問題の説明3: Python 3で記述されたMaxCompute UDFを呼び出すと、次のエラーメッセージが報告されます。UnicodeDecodeError: 'utf-8' codec can't decode byte xxx in position xxx: invalid continuation byte

    • 原因: 関数シグネチャで指定されている入力パラメーターの種類はSTRINGです。 ただし、Python 3 UDFを呼び出したときに入力された文字列は、UTF-8形式でSTR型のPythonオブジェクトにデコードできません。

    • 解決策:

      • UTF-8以外の形式でエンコードされた文字列をMaxComputeテーブルに書き込まないでください。

        Python 2 UDFは、STR型のGBKベースのPythonオブジェクトを返します。 Pythonオブジェクトは通常、MaxComputeテーブルに書き込むことができますが、Python 3 UDFでは読み取ることができません。 したがって、Python 2 UDFによって返される前に、PythonオブジェクトをUTF-8形式でエンコードすることをお勧めします。 たとえば、ret.de code('gbk').encode('utf-8 ') を使用してPythonオブジェクトretをエンコードできます。

      • SQL文で組み込み関数is_encodingを使用して、UTF-8以外の形式でエンコードされたデータを除外します。 例:

        select py_udf(input_col) from example_table where is_encoding(input_col, 'utf-8', 'utf-8') = true;
      • Pythonコードの関数シグネチャで指定されている入力パラメータータイプをBINARYに変更します。 次に、SQL文でSTRING型の列のデータ型をBINARY型に変換し、Python 3 UDFの入力パラメーターとして使用します。 例:

        select py_udf(cast(input_col as binary)) from example_table;

関数署名

次の関数シグネチャの問題が発生する可能性があります。

  • 問題の説明1: MaxCompute UDFを呼び出すと、次のエラーメッセージが報告されます。UDTF/UDF/UDAF yyyyのクラスxxxのアノテーションに無効なコンテンツ '<EOF>' が含まれています

    • 原因: MaxCompute UDFの入力パラメーターまたは出力パラメーターが複雑なデータ型であり、関数シグネチャの関連情報が無効です。

    • 解決策: 関数シグネチャの複合データ型に関する情報を変更して、関数シグネチャが有効であることを確認します。 関数シグネチャの詳細については、「関数シグネチャとデータ型」をご参照ください。

  • 問題の説明2: MaxCompute UDFを呼び出すと、次のエラーメッセージが報告されます。TypeError: expected <class 'xxx'> but <class 'yyy'> found, value:zzz

    • 原因: 関数シグネチャで指定された戻り値の型が、MaxCompute UDFによって返されるデータのデータ型と一致していません。

    • 解決策: 想定されるデータ型を確認し、整合性を確保するために関数シグネチャまたはMaxCompute UDFコードを変更します。

  • 問題の説明3: MaxCompute UDFを呼び出すと、次のエラーメッセージが報告されます。セマンティック分析例外-ユーザー定義関数zzのクラスxxx.yyyの評価関数は注釈 ***->*** と一致しません

    • 原因: 関数シグネチャで指定されている入力パラメーターの数が、MaxCompute UDFコードの関連メソッドの入力パラメーターの数と一致していません。

    • 解決策: 入力パラメータの実際の数を確認し、整合性を確保するために関数シグネチャまたはMaxCompute UDFコードを変更します。

サードパーティパッケージ

  • 問題の説明: MaxCompute UDFを呼び出すと、GLIBCXX_x.x.xが見つかりません

  • 原因: GLIBCXXのバージョン。ライブラリファイルは、MaxComputeでサポートされているバージョンよりも後に依存します。 glibcバージョンとCXXABIバージョンでも同じ問題が発生する可能性があります。

  • 解決策: 互換性のあるホイールパッケージを使用するか、MaxComputeと互換性のある環境でライブラリファイルを作成します。 MaxComputeは、バイナリ実行可能ファイルまたは次の最新バージョンをサポートしています。ライブラリファイルが依存するので:

    GLIBC <= 2.17
    CXXABI <= 1.3.8
    GLIBCXX <= 3.4.19
    GCC <= 4.2.0

UDTF

  • 問題の説明: MaxCompute UDTFを呼び出すと、次のエラーメッセージが報告されます。セマンティック分析例外-2つのエイリアスを期待しますが、0があります

  • 原因: Python UDTFコードで出力列名が指定されていません。

  • 解決策: AS句を使用して、Python UDTFを呼び出すために使用されるSELECTステートメントで列名を指定します。 例:

    select my_udtf(col0, col1) as (ret_col0, ret_col1, ret_col2) from tmp1;

UDAFs

  • 問題の説明1: MaxCompute UDAFを呼び出すと、次のエラーメッセージが報告されます。Script exception - ValueError: unmarshallable object

    • 原因: Python UDAFコードのbufferパラメーターの値がマーシャリング不可能なオブジェクトです。 詳細については、「Marshal」をご参照ください。

    • 解決策: bufferに値を割り当てるときは、値がマーシャリング可能なオブジェクトであることを確認してください。 Python UDAFでLIST型とDICT型の2つのバッファーを使用する場合は、new_bufferメソッドでreturn [list(), dict()] を使用する必要があります。 iterate、merge、またはterminateメソッドでbufferまたはpbufferを使用する場合、LISTタイプのbufferbuffer[0] またはpbuffer[0] に対応し、DICTタイプのbufferbuffer[1] またはpbuffer[1] に対応します。 バッファの要素がLIST型またはDICT型である場合、要素もマーシャリング可能なオブジェクトでなければなりません。

  • 問題の説明2: MaxCompute UDAFを呼び出すと、次のエラーメッセージが報告されます。Python UDAFバッファサイズoverflowed: 2821486749

    • 原因: マーシャリング操作後、Python UDAFコードのbufferサイズが2 GBを超えました。 bufferサイズが正しく処理されません。 その結果、データ量に応じてbufferサイズが大きくなる。

    • 解決策: Python UDAFコードのロジックを書き換えます。 このように、bufferサイズは、データ量とともに増加しない。 たとえば、bufferlistの場合、イテレーションおよびマージフェーズではbufferにデータを追加できません。 Python UDAFの詳細については、「概要」をご参照ください。