我正在读取hdfs文件中的单词,该文件大小约为3.3 GB,并使用spark来计算特定单词的频率。
queryList
是我必须计算其频率的单词集合。
这是我目前的代码
//filter
JavaRDD<String> filterFp = textFile.filter(new Function<String, Boolean>() {
@Override
public Boolean call(String s) throws Exception {
boolean res = s.equals(queryList.get(0));
for (int i = 1; i < queryList.size(); i++) {
res = res || s.equals(queryList.get(i));
}
return res;
}
});
// map
JavaPairRDD<String, Integer> mapper =
filterFp.mapToPair(new PairFunction<String, String, Integer>() {
@Override
public Tuple2<String, Integer> call(String s) throws Exception {
return new Tuple2<>(s, 1);
}
});
// reduce
JavaPairRDD<String, Integer> counts = mapper.reduceByKey(new Function2<Integer, Integer, Integer>() {
@Override
public Integer call(Integer integer, Integer integer2) throws Exception {
return integer + integer2;
}
});
所有工作时间的总和是5-6秒。
有没有什么方法可以更好地优化我的任务。