2016-07-01 8 views
2

私はPigで処理しようとしているCSVファイルとして入力を持っています。 csvには、一部の行の破損値を含む日付列があります。 FOREACH...GENERATEステートメントの日付列にToDate()関数を適用する前に、破損している行(日付列が壊れている)を除外するメカニズムを提案してください。ToDate for Pigで個々の行の例外を避ける

私のデータのサンプル形式は:

A、21,12/2010分の1 8:26
B、33,12/2010分の1 8:26
C、42、名前(csvファイルを想定し

Yにロードされます:私は
D、30,12/2013分の1 9時26

私はこれをロードして、これを変換することができるようにしたいが破損しています、id 、日付)

X = FOREACH Y GENERATE ToDate(date, 'mm/dd/yyyy HH:mm') AS newdate; 

私はCで始まる行をフィルタリングするために上記の文をそのまま、上記の文が例外をスローし、以来、いつ私はDUMP X;ジョブが失敗する前にYFILTERを適用したいです。

+0

私が考えることができる最も明白でストレートなのは、フィールドの長さでフィルタリングすることです。それ以外にも例外をキャッチするためのUDFを書くことができます。 – madbitloman

答えて

1

2つのケースのToDateは失敗し、

1)日付が欠落しているか、構文が間違っている、 フィルター正規表現を使用してすべての日付、

X = FILTER Y BY (date matches '/(0[1-9]|1[012])[- \/.](0[1-9]|[12][0-9]|3[01])[- \/.](19|20)\d\d/'); 

2)日付が該当しますあなたのタイムゾーンのDST(https://en.wikipedia.org/wiki/Daylight_saving_time)。手動でフィルタリングする必要があります。

関連する問題