2016-07-01 1 views
2

돼지를 처리하려고하는 CSV 파일로 입력이 있습니다. CSV에는 일부 열에 대해 손상된 값이 포함 된 날짜 열이 있습니다. FOREACH...GENERATE 문에서 ToDate() 함수를 날짜 열에 적용하기 전에 손상된 행 (열이 손상된 행)을 필터링하는 메커니즘을 제안하십시오.돼지의 ToDate에서 개별 행을 제외하고 예외 발생을 피하십시오.

내 데이터의 샘플링 포맷은 :

8:26
B/2천10분의 1 21,12/2,010분의 1 33,12 8시 26분
C, 42, 내가 9시 26분

/2,013분의 1 30,12 내가이를 넣은 다음이로 변환 할 수 있도록하려면,
D 손상입니다 : Y로 csv 파일을 가정

로드 (명칭 ,신분증 날짜) 내가있는 한, 위의 문은 예외가 발생하고 작업이 때 DUMP X; 실패, 이후 C.로 시작하는 행을 필터링하려면 위의 문 앞에 FILTERY를 적용 할

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

.

+0

제가 생각할 수있는 가장 확실하고 솔직한 것은 필드의 길이로 필터링하는 것입니다. 이외에도 예외를 잡기 위해 UDF를 작성할 수 있습니다. – madbitloman

답변

1

두 가지 경우를 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). 수동으로 필터링해야합니다.

관련 문제