2017-08-10 8 views
0

私はyyyyMMddフォーマットをyyyy/MM/ddフォーマットに変換しようとしています。フォーマットが正しくありません: "19690321"が短すぎます

コード:

STOCK_A = LOAD '/user/root/xxxx/*' USING PigStorage('|'); 
data = FILTER STOCK_A BY ($1 matches '.*ID.*'); 
MSH_DATA = FOREACH data GENERATE ToDate($8,'yyyy/MM/dd','UTC') AS dob; 

私はエラーの下に取得していた結果をダンプしようとしています。

エラーorg.apache.pig.tools.pigstats.SimplePigStats - ERROR 0: 例外実行中[POUserFunc(名称: POUserFunc(org.apache.pig.builtin.ToDate3ARGS)[日時] - scope- 209 演算子キー:スコープ-209)子供: java.lang.IllegalArgumentExceptionが::[]]でヌル無効なフォーマット: "19690321" も 短いです

サンプル:

[email protected]#PDULD21F|ID|1|483|1020783||[email protected]#PDULD||19690321|F| 

$ 8が有効です。問題が発生する理由を特定できません。どんな助けでも本当に感謝しています。

あなたが使用

答えて

1

ToDate($8,'yyyy/MM/dd','UTC') 

が、フォーマットは

19690321 

あるので、あなたが

ToDate($8,'yyyyMMdd','UTC') 
+0

をTODATEするフィールドを渡す前にchararrayに変換する必要がありますが、私は日付がYYYYMMDDからYYYY/MM/DD形式であることにしたいです。どうすればそれを達成できますか? – Ironman

+0

todateはあなたの文字列を日付に変換することです。豚はフォーマットが日付であることを知っています。年齢を計算し、2つの日付の間で行を選択することができます。日付を印刷したい場合は、ToStringで文字列に変換する必要があります。たとえば、 "ToString(yourDate、 'yyyy/MM/dd')"を使用することができます。または「ToString(yourDate、 'ww-yyyy')」に週番号を設定することもできます。 – wargre

1

を持つべき問題は、負荷statement.Sinceの可能性が高いです、あなたは、スキーマを指定しない場合、データ型はデフォルトでbytearrayになります。あなたは

STOCK_A = LOAD '/user/root/xxxx/*' USING PigStorage('|'); 
data = FILTER STOCK_A BY ($1 matches '.*ID.*'); 
MSH_DATA = FOREACH data GENERATE ToDate((chararray)$8,'yyyy/MM/dd','UTC') AS dob; 
関連する問題