Java 理解apachespark过滤器转换行为
我在JavaRDD中有一个项目列表,其中每个项目都是一个日期(Java日历)。现在,我想过滤所有小于给定日期的日期。这是我的密码: 主要Java 理解apachespark过滤器转换行为,java,apache-spark,filter,Java,Apache Spark,Filter,我在JavaRDD中有一个项目列表,其中每个项目都是一个日期(Java日历)。现在,我想过滤所有小于给定日期的日期。这是我的密码: 主要 在将计算分布到该变量的过程中,到底发生了什么?也因为结果显然是正确的,但我在更复杂的情况下调试这段代码时遇到了麻烦。这对我来说很奇怪,在清除for循环中的过滤器日期之后,您如何获得日期?删除该行后,您的代码在meSorry中运行良好,这是一个复制/粘贴错误,one是要初始化的日历。实际上,代码对我来说也很好,但是我不能理解输出。代码对我来说很好,我的意思是我的
在将计算分布到该变量的过程中,到底发生了什么?也因为结果显然是正确的,但我在更复杂的情况下调试这段代码时遇到了麻烦。这对我来说很奇怪,在清除
for
循环中的过滤器日期之后,您如何获得日期?删除该行后,您的代码在meSorry中运行良好,这是一个复制/粘贴错误,one
是要初始化的日历。实际上,代码对我来说也很好,但是我不能理解输出。代码对我来说很好,我的意思是我的输出总是给我预期的filterDate。您的问题不会出现,因为meI在我的集群上运行了相同的代码。在集群上,输出正常。当我在本地机器上运行它时,仍然可以得到输出。真奇怪。更有趣的是,如果我在call()
方法中的第一个系统之后添加另一个check作为Sytem.out.println(filteringDate.getTimeInMillis()+”:“+1451642400000l)
,它总是以毫秒为单位打印正确的时间,而第一个系统打印错误的日期,如图所示。我以为这是时区的问题,但显然不是。我真的很不安。
public static void main(String[] args) {
SparkConf conf = new SparkConf().setAppName("Date comparison test")
.setMaster("local[4]").set("spark.executor.memory", "1g");
JavaSparkContext sc = new JavaSparkContext(conf);
// initializes a filter date to 01/01/2016 at 10:00:00
Calendar filterDate = Calendar.getInstace();
filterDate.clear();
filterDate.setTimeInMillis(1451642400000l);
// initializes an array of 40 calendars, in which every date
// is 1 hour later than the previous, starting from
// 01/01/2016 at 08:00:00
ArrayList<Calendar> calendarArray = new ArrayList<>();
// milliseconds corresponding to 01/01/2016 at 08:00:00
long initial = 1451635200000l;
for(int i=0; i < 40; ++i) {
Calendar one = Calendar.getInstace();
one.clear();
one.setTimeInMillis(initial);
calendarArray.add(one);
initial += 3600000;
}
JavaRDD<Calendar> rdd = sc.parallelize(calendarArray);
JavaRDD<Calendar> rddFiltered = rdd.filter(new FilterTest(filterDate));
System.out.println("RDD SIZE " + rddFiltered.count());
sc.close();
}
public class FilterTest implements Function<Calendar, Boolean> {
private static final long serialVersionUID = -3134317182912968444L;
private final Calendar filteringDate;
public FilterTest_(Calendar filteringDate) {
super();
this.filteringDate = filteringDate;
}
@Override
public Boolean call(Calendar arg0) throws Exception {
// getStandardFormattedDate just prints a date in a given format
System.out.println(TimeUtils.getStandardFormattedDate(arg0) + " - " + TimeUtils.getStandardFormattedDate(filteringDate));
if(arg0.before(filteringDate)) {
return false;
}
else {
return true;
}
}
}
Sat, 01 Jan 2016 08:00:00 - Fri, 01 Jan 2016 10:00:00
Sat, 01 Jan 2016 08:00:00 - Fri, 01 Jan 2016 10:00:00
Fri, 01 Jan 2016 08:00:00 - Fri, 01 Jan 2016 10:00:00
Sat, 02 Jan 2016 15:00:00 - Fri, 01 Jan 2016 09:00:00
Fri, 01 Jan 2016 09:00:00 - Fri, 01 Jan 2016 10:00:00
Sat, 02 Jan 2016 15:00:00 - Fri, 01 Jan 2016 09:00:00
Fri, 01 Jan 2016 10:00:00 - Fri, 01 Jan 2016 10:00:00
Sat, 02 Jan 2016 20:00:00 - Fri, 01 Jan 2016 10:00:00
Fri, 01 Jan 2016 10:00:00 - Fri, 01 Jan 2016 10:00:00
Fri, 01 Jan 2016 10:00:00 - Fri, 01 Jan 2016 10:00:00
Fri, 01 Jan 2016 10:00:00 - Fri, 02 Jan 2016 07:00:00
Sat, 02 Jan 2016 17:00:00 - Fri, 01 Jan 2016 10:00:00
Fri, 01 Jan 2016 11:00:00 - Fri, 01 Jan 2016 10:00:00
Sat, 02 Jan 2016 21:00:00 - Fri, 01 Jan 2016 10:00:00
Fri, 01 Jan 2016 10:00:00 - Sat, 01 Jan 2016 22:00:00
Fri, 01 Jan 2016 22:00:00 - Fri, 01 Jan 2016 10:00:00
Sat, 01 Jan 2016 22:00:00 - Fri, 01 Jan 2016 12:00:00
Fri, 01 Jan 2016 23:00:00 - Fri, 01 Jan 2016 10:00:00
Fri, 01 Jan 2016 23:00:00 - Fri, 01 Jan 2016 10:00:00
Fri, 01 Jan 2016 23:00:00 - Fri, 01 Jan 2016 10:00:00
Fri, 01 Jan 2016 10:00:00 - Fri, 02 Jan 2016 00:00:00
Sat, 02 Jan 2016 00:00:00 - Fri, 01 Jan 2016 19:00:00
Fri, 01 Jan 2016 13:00:00 - Fri, 02 Jan 2016 10:00:00
Sat, 01 Jan 2016 10:00:00 - Sat, 01 Jan 2016 14:00:00
Sat, 02 Jan 2016 01:00:00 - Fri, 01 Jan 2016 10:00:00
Fri, 01 Jan 2016 10:00:00 - Fri, 02 Jan 2016 11:00:00
Sat, 01 Jan 2016 14:00:00 - Fri, 02 Jan 2016 11:00:00
Sat, 02 Jan 2016 11:00:00 - Fri, 01 Jan 2016 15:00:00
Fri, 01 Jan 2016 15:00:00 - Sat, 02 Jan 2016 10:00:00
Sat, 02 Jan 2016 02:00:00 - Fri, 01 Jan 2016 10:00:00
Sat, 02 Jan 2016 15:00:00 - Sat, 02 Jan 2016 10:00:00
Fri, 01 Jan 2016 10:00:00 - Fri, 01 Jan 2016 10:00:00
Fri, 01 Jan 2016 10:00:00 - Fri, 01 Jan 2016 10:00:00
Fri, 01 Jan 2016 12:00:00 - Fri, 01 Jan 2016 22:00:00
Sat, 01 Jan 2016 17:00:00 - Fri, 02 Jan 2016 10:00:00
Fri, 01 Jan 2016 22:00:00 - Fri, 01 Jan 2016 10:00:00
Sat, 02 Jan 2016 13:00:00 - Fri, 01 Jan 2016 10:00:00
Sat, 01 Jan 2016 10:00:00 - Fri, 01 Jan 2016 10:00:00
Sat, 02 Jan 2016 23:00:00 - Fri, 01 Jan 2016 10:00:00