2016-07-13 7 views
1
/*calculating average for itemssold(int) grouped by city */ 

a = LOAD 'sales.txt' USING PigStorage(','); /*loading sales data and it has 50 fields that are comma separated*/ 
b = FOREACH a GENERATE $3 as city:chararray, $4 as itemssold:int;/*defining schema for needed fields*/ 
c = GROUP b BY city; /*grouping by city*/ 
d = FOREACH c GENERATE group,AVG(b.itemssold); /*calculating average*/ 
dump d; /*writing output*/ 

ここで私は都市別に分類されたitemssoldの平均を計算しようとしています。ブタスクリプトによる平均計算

Error: Error while computing Average.

誰でもこのエラーを修正できますか?

注:sales.txtには50個のフィールドがカンマで区切られているので、Sales.txtを関係自体にロードする際に、すべてのフィールドにスキーマを定義したくありません。

+0

ダンプbはどのように見えるのですか?列インデックスは$ 0.000から始まります。必ずcityとitemssoldはデータファイルの4番目と5番目の列です。 –

+0

ダンプb;そうで..... シカゴ、12の ダラス、20 アトランタ、22 シカゴ、23 アトランタ、12の ダラス、87 、以下のように見えます。 はいインデックスは$ 0の位置から始まることを認識しています。彼らはそれぞれ4位と5位にいる。 –

+0

c = GROUP bを試してください。b.city; d = FOREACH c、b.city、AVG(b.itemssold)を生成する。 –

答えて

0

たぶん、あなたのデータは、いくつかの欠損値が含まれ、このように最初にそれをフィルタリングしてみてください:上記のコードは働い

no_nulls = FILTER b BY itemssold is not null; 
0
a = LOAD 'sales.txt' USING PigStorage(','); 
b = FOREACH a GENERATE (chararray) $3 as city, (int) $4 as itemssold; 
c = GROUP b BY city; 
d = FOREACH c GENERATE group,AVG(b.itemssold); 
dump d; 

。関係b GENERATEでは、私は鋳造ではなくスキーマを定義しようとしていたので、豚は混乱しました。修正しました今&それは働いた。あなたの提案に感謝します。