このトピックでは、データ拡張の原因と、データ拡張の問題を処理するために実行できる対策について説明します。
問題の説明
Fuxiタスクの出力データ量は、その入力データ量よりもはるかに大きい。 入出力データの量は、LogviewページのFuxiタスクのI/OレコードおよびI/Oバイト属性に基づいて取得できます。
次の図では、Fuxiタスクの入力データ量は約1 GB、処理後の出力データ量は約1テラバイトです。 1テラバイトのデータを1つのインスタンスで処理すると、データ処理効率が大幅に低下します。

原因と対策
次の表に、この問題の考えられる原因と実行可能な対策を示します。
原因 | 説明 | 測定 |
コード内のバグ | コードに欠陥があります。 例:
| コードのバグを修正します。 |
不適切な集計操作 | ほとんどの集計操作は再帰的で、中間結果はマージされます。 ほとんどの場合、中間結果データの量は大きくなく、ほとんどの集計操作の計算の複雑さは低いです。 したがって、これらの集計操作は、データ量が大きくても時間がかからない。 ただし、 collect_list やmedian などの一部の集計操作では、すべての中間結果データを保持する必要があります。 これらの集計操作が他の集計操作とともに使用される場合、データ拡張が発生する可能性があります。 例:
| データ拡張を引き起こす集計操作を実行しないでください。 |
不適切なJOIN 操作 | たとえば、JOIN 操作の左側のテーブルには大量の母集団データが含まれ、右側のテーブルにはディメンションテーブルがあり、性別ごとに数百行のデータが記録されます。 性別に基づいてデータに対してJOIN 操作を実行すると、左側のテーブルのデータのサイズが元のサイズの数百倍に拡大する場合があります。 | データの拡張を防ぐために、JOIN 操作を実行する前に、右側のテーブルの行にデータを集約できます。 |