2016-03-29 1 views
0

私は2つのテーブルを結合しようとしており、あるテーブルの数値を別のテーブルの数値で割ります。私はオリジナルでそれを行い、同じ値を持つ新しいテーブルを生成しようとしましたが、同じエラーが両方の時間で発生し、それは余分な混乱です。ブタの異なるテーブルから数値を分割する方法

--get the data 
lines = LOAD '/historicaldata.csv' USING PigStorage(' ') AS (ticker:chararray, date:long, open:long, high:long, low:long, close:long, volume:long); 

--limit it between the dates we want 
specDates = FILTER lines BY (date<=20000103 and date>=19900101); 

--sort by ticker symbol 
companies = GROUP specDates BY ticker; 

--sort DESC and get the top to get the ending date 
sorted_end = FOREACH companies { 
    sorted1 = ORDER specDates BY date DESC; 
    endDate = LIMIT sorted1 1; 
    GENERATE endDate.ticker AS ticker, endDate.open AS open, endDate.close AS close; 
} 

--sort ASC and get the top to get the starting date 
sorted_begin = FOREACH companies { 
    sorted2 = ORDER specDates BY date ASC; 
    startDate = LIMIT sorted2 1; 
    GENERATE startDate.ticker AS ticker, startDate.open AS open, startDate.close AS close; 
} 

joined = JOIN sorted_end BY ticker, sorted_begin BY ticker; 
final = FOREACH joined GENERATE sorted_end::ticker as ticker, sorted_begin::open as open, sorted_end::close as close; 
final2 = FOREACH final GENERATE ticker as ticker, (float)(close/open) as growth_factor; 

私は入れませんエラーは、次のとおりです。

(Name: Divide Type: null Uid: null)incompatible types in Divide Operator left hand side:bag :tuple(close:float) right hand side:bag :tuple(open:float) 

は、彼らが別の袋から来ていること以外に、「互換性のない型」である理由を私は確認していない浮動小数点数ですが、「に追加する両最終的な "とそこからそれをやろうとすると動作しません。

データの形式は次のとおりです。

AA,20140131,11.60,11.80,11.45,11.48,33014100 
AA,20140130,12.05,12.07,11.83,11.92,23223500 
AA,20140129,11.64,12.23,11.58,11.96,44433000 

すべてのエントリがあなたのクエリに基づいてすべての列とうまくフォーマットされ、非ゼロの数字

+0

あなたの完全なコードといくつかのサンプル入力を投稿してください –

+0

参加する両方のデータセットのサンプルデータをそれらのためのスキーマとともに投稿してください。 – CodeReaper

答えて

0

を含んで、私は私の上にダミーテーブルを作成しようとしました結果を生成する。私は何の問題も見つけず、部門の運営は正常に完了しました。 PFBは、私は豚に発砲いくつかのサンプルクエリ: - あなたのケースでは除数の値がヌル値または0を持っていない場合

A = LOAD '/home/training/716391/pig/pigdata.csv' USING PigStorage(',') as (ID:INT, name:CHARARRAY, GPC:FLOAT) 
B = LOAD '/home/training/716391/pig/pigdata2.csv' USING PigStorage(',') as (ID:INT, name:CHARARRAY, GPC:FLOAT) 
C = join A by ID, B by ID 
D = FOREACH C generate A::ID as IDA, A::name as NAMEA, A::GPC as GPCA, B::ID as IDB, B::name as NAMEB, B::GPC as GPCB; 
E = FOREACH D GENERATE IDA, (FLOAT)(GPCA/GPCB) AS VALUE; 

あなたは、確認してくださいことはできますか?

sorted_endとsorted_beginのロードステートメントを共有してください。

+0

ええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええとすべての除数はゼロ以外のゼロ以外の値である必要があります –

+0

sorted_endとsorted_beingの 'ticker'の値が異なるため、結合関係が '結合'されて空の関係が生成されるという点を除いて、これはティッカー(会社の関係)でグループ化していますが、後で日付(昇順と降順)でソートし、各リレーションからタプルを1つだけ選択するためです。これは、それぞれの関係において異なる「ティッカー」値をもたらした可能性がある。 – Jeet23

関連する問題