1

私のPIGクエリは以下のとおりです


emp = LOAD 'hdfs://master:9000/hrms/DimEmployee' AS  (EmployeeID,OrganizationID,EmploymentType);
grouped = group emp by (OrganizationID, EmploymentType);
AggEmploymentType = FOREACH grouped GENERATE group.OrganizationID, group.EmploymentType,COUNT(emp.EmployeeID) as cnt;
DUMP AggEmploymentType;

以下は、上記の豚のクエリの段階的な説明です。

  1. タブ区切りの HDFS ファイルから 100097 レコードをロードします。
  2. 会社別、雇用状況別のレコードでグループ化
  3. EmployeeID でレコードをカウントします。
  4. 出力をダンプします。

上記のクエリを実行した後、Pig シェルは、100115 レコードを正常に読み取ったと述べています。

Pig クエリが正常に実行された後、次の 3 つの問題が発生します。

  1. pig が HDFS で利用可能なよりも多くのレコードを準備できる理由 (100115>100097)
  2. 「ACCESSING_NON_EXISTENT_FIELD 27 TIMES」という警告メッセージが表示される理由
  3. MySQL で同じグループ クエリを実行すると、結果のカウント差は 9 になります。

できるだけ早く私の問題を解決してください。私の豚、hadoop プロジェクトは、あなたの迅速な対応にかかっています。上記の問題により、過去 5 日間から影響を受けています

4

1 に答える 1

0

追加のレコードをロードしていて、存在しないフィールドへのアクセスエラーも発生しているのは偶然ではないと思います。読み込み中に列が足りない場合、存在しないフィールドエラーが表示されます。たとえば、次のような行が表示された場合、エラーが発生する可能性がありますhello,world。3列が予想される場合。

提案:もう1つ注意すべき点は、COUNT(x)nullのアイテムはカウントされないということです。と交換してみてCOUNT(emp.EmployeeID)くださいCOUNT_STAR(emp.EmployeeID)COUNT_STARnullを考慮に入れます。

提案:フィールドがない場合にPigが行うことの1つは、nullを入れることです。GROUPnullのあるレコード(および潜在的に「不良」なレコード)を削除するフィルターを前に追加することをお勧めします。

emp = FILTER emp BY EmployeeID IS NOT NULL AND 
                    OrganizationID IS NOT NULL AND
                    EmploymentType IS NOT NULL;
于 2012-07-20T18:22:39.887 に答える