spark1.6.1入门api实现单词计数

刚刚学习spark,所以写个简单案列,来提升自己。
spark也会有类似于hadoop的mapreduce过程,用于数据的处理。
准备工作:先将一个写有单词的文本传上到hdfs。
函数解释:
1,flatMap:
flatmap与map类似,区别是原RDD中的元素经map处理后只能生成一个元素,而原RDD中的元素经flatmap处理后可生成多个元素来构建新RDD。返回的是一个迭代
我们也是通过这个函数将文本分割成一个,数组然后返回。

2,mapToPair:
注意它返回的数类型是:JavaPairRDD。

Spark为包含键值对类型的RDD提供了一些专有的操作。这些RDD被称为PairRDD mapToPair函数会对一个RDD中的每个元素调用f函数,其中原来RDD中的每一个元素都是T类型的,调用f函数后会进行一定的操作把每个元素都转换成一个<K2,V2>类型的对象,其中Tuple2为多元组

因为后面要对每个单词出现的次数进行统计,所以先在这里将每个单词作为key,value都设为1.

3,reduceByKey:
reduceByKey函数就是对元素为KV对的RDD中Key相同的元素的Value进行reduce,因此,Key相同的多个元素的值被reduce为一个值,然后与原RDD中的Key组成一个新的KV对。

这里就是接受到前面的mapToPair返回的结果要是有key是相同的,他们的value值就会相加,会合拼成一个key value。

最后通过saveAsTextFile方法将结果保存到hdfs上就可以了。

代码展示:

import java.util.Arrays;
import org.apache.spark.*;
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.*;
import scala.Tuple2;

public class Worldconut {
public static void main(String[] args) {
SparkConf conf = new SparkConf();
conf.set(“spark.testing.memory”, “2147480000”); // 因为jvm无法获得足够的资源 这串数字大于512
//System.out.println(“**“+conf);
System.out.println(“单词计数开始了。。。。。。。。。。。。。”);
JavaSparkContext sc = new JavaSparkContext(“local”, “First Spark App”, conf);
// System.out.println(conf+”***“);
String logFile = “hdfs://192.168.61.128:9000/spark001/wordcount.txt”; // Should
JavaRDD textFile = sc.textFile(logFile).cache();

    //flatmap与map类似,区别是原RDD中的元素经map处理后只能生成一个元素,而原RDD中的元素经flatmap处理后可生成多个元素来构建新RDD。
    //返回的是一个迭代
    JavaRDD<String> words = textFile.flatMap(new FlatMapFunction<String, String>() {
        public Iterable<String> call(String s) {
            return Arrays.asList(s.split(" "));
        }
    });

    //Spark为包含键值对类型的RDD提供了一些专有的操作。这些RDD被称为PairRDD
    //mapToPair函数会对一个RDD中的每个元素调用f函数,其中原来RDD中的每一个元素都是T类型的,
    //调用f函数后会进行一定的操作把每个元素都转换成一个<K2,V2>类型的对象
    //Tuple2多元组
    JavaPairRDD<String, Integer> pairs = words.mapToPair(new PairFunction<String, String, Integer>() {
        public Tuple2<String, Integer> call(String s) {
            return new Tuple2<String, Integer>(s, 1);
        }
    });

    //reduceByKey就是对元素为KV对的RDD中Key相同的元素的Value进行reduce,
    //因此,Key相同的多个元素的值被reduce为一个值,然后与原RDD中的Key组成一个新的KV对。
    JavaPairRDD<String, Integer> counts = pairs.reduceByKey(new Function2<Integer, Integer, Integer>() {
        public Integer call(Integer a, Integer b) {
            return a + b;
        }
    });

    //将结果直接写入到dfs上
    counts.saveAsTextFile("hdfs://192.168.61.128:9000/sparksaveFile001/wordconunt/" + System.currentTimeMillis());
    System.out.println("单词计数完成!!!!!!!!!!!!!!");
}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值