【问题标题】:Filtering Dates Using Apache Pig使用 Apache Pig 过滤日期
【发布时间】:2018-12-03 19:21:33
【问题描述】:

我有一个带有上映日期的电影列表。我想获取比给定年份更新的电影列表,例如1982 年,所以 1983 年、1984 年等电影使用 Apache Pig。

日期格式为 01-Jan-1995。我可以正确加载数据,但我的 FILTER 操作表明类型不匹配。

我尝试将 chararray 转换为 datetime 格式,但是结果是格式为 1995-01-01T00:00:00.000-08:00 的日期。

1) 如何只检索年份

2) 只过滤比所选年份新的值?

ratings = LOAD '/user/maria_dev/ml-100k/u.data' AS (userID:int, movieID:int, rating:int, ratingTime:int);
metadata = LOAD '/user/maria_dev/ml-100k/u.item' USING PigStorage ('|') AS (movieID:int, movieTitle:chararray, releaseDate:chararray, imdbLink: chararray);
nameLookup = FOREACH metadata GENERATE movieID, movieTitle, ToDate(releaseDate, 'dd-MMM-yyyy') AS releaseYear;
nameLookupYear = FOREACH nameLookup GENERATE movieID, movieTitle, ToString(releaseYear, 'yyyy') AS movieYear;
oldMovies = FILTER nameLookupYear by movieYear < ('1982');

DUMP oldMovies;

【问题讨论】:

  • 如果类型不匹配,您应该确认您的文件中没有标题或空日期

标签: apache-pig


【解决方案1】:

使用GetYear() 作为日期时间对象的年份部分,如果您想要1982 年以后的电影,过滤器应该是movieYear &gt; 1982

nameLookupYear = FOREACH nameLookup GENERATE movieID, movieTitle, GetYear(releaseYear) AS movieYear;
oldMovies = FILTER nameLookupYear by movieYear > 1982;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-04
    • 1970-01-01
    • 1970-01-01
    • 2016-11-28
    相关资源
    最近更新 更多