我们在接触 package org.apache.spark.examples;
import org.apache.spark.api.java.JavaPairRDD;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.function.FlatMapFunction;
import org.apache.spark.api.java.function.Function2;
import org.apache.spark.api.java.function.PairFunction;
import scala.Tuple2;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Pattern;
public final class JavaWordCount {
private static final Pattern SPACE = Pattern.compile(" ");
public static void main(String[] args) throws Exception {
if (args.length < 2) {
System.err.println("Usage: JavaWordCount ");
System.exit(1);
}
JavaSparkContext ctx = new JavaSparkContext(args[0],
"JavaWordCount",
System.getenv("SPARK_HOME"),
JavaSparkContext.jarOfClass(JavaWordCount.class));
JavaRDD lines = ctx.textFile(args[1], 1);
JavaRDD words = lines.flatMap(
new FlatMapFunction() {
@Override
public Iterable call(String s) {
return Arrays.asList(SPACE.split(s));
}
});
JavaPairRDD ones = words.map(
new PairFunction() {
@Override
public Tuple2 call(String s) {
return new Tuple2(s, 1);
}
});
JavaPairRDD counts = ones.reduceByKey(
new Function2() {
@Override
public Integer call(Integer i1, Integer i2) {
return i1 + i2;
}
});
List> output = counts.collect();
for (Tuple2, ?> tuple : output) {
System.out.println(tuple._1() + ": " + tuple._2());
}
System.exit(0);
}
}
这里有必要介绍一下这里用到的几个函数。首先是map函数,它根据现有的数据集返回一个新的分布式数据集,由每个原元素经过func函数转换后组成,这个过程一般叫做转换(transformation);flatMap函数类似于map函数,但是每一个输入元素,会被映射为0到多个输出元素,因此,func函数的返回值是一个Seq,而不是单一元素,可以从上面的代码中看出;reduceByKey函数在一个(K,V)对的数据集上使用,返回一个(K,V)对的数据集,key相同的值,都被使用指定的reduce函数聚合到一起。
运行上面的代码之前你得先编译好(话说我好几次用Maven编译老是不成功啊,不过大家可以用./sbt/sbt assembly进行编译)。编译好之后可以用下面的命令进行运行: ./bin/spark-class \
org.apache.spark.deploy.yarn.Client \
--jar ./jars/spark-examples-assembly-0.9.1.jar \
--class org.apache.spark.examples.JavaWordCount \
--args yarn-standalone \
--args /home/wyp/cite75_99.txt \
org.apache.spark.examples.JavaWordCount类接收两个参数,第一个参数指定你程序运行的master;第二个参数指定你需要计算Wordcount文件的绝对路径,这个文件需要在HDFS上。程序运行的过程中我们可以在 submitting: 1
find: 1
versions: 4
Regression: 1