SparkWordCount和JavaWordCount

(1)SparkWordCount

import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.rdd.RDD

object SparkWordCount {

  def main(args: Array[String]): Unit = {
    //创建配置信息
    val sparkConf = new SparkConf()
    //local模拟一个集群环境运行任务
    //local[num],使用的线程数目去模拟一个集群
    //local[*],使用本地所有有空闲的线程模拟集群
    //默认为2
    sparkConf.setAppName("SparkWC")
      .setMaster("local[*]")

    //创建sparkcontext
    val sc:SparkContext = new SparkContext(sparkConf)

    //读取数据
   // val lines:RDD[String]=sc.textFile(args(0))
   val lines:RDD[String]=sc.textFile( "D:\\ceshi\\input\\1.txt")

    //文件里面所有单词的一个集合,先map再压平
    val words:RDD[String] = lines.flatMap(_.split(" "))
    //把单词通过map映射成一个元组
    val tuple = words.map((_,1))

    println(tuple)

    //按照key进行reduce,并将value累加
    val reduced = tuple.reduceByKey(_+_)
    println(reduced)
    //排序
    val res:RDD[(String,Int)] = reduced.sortBy(_._2,false)
    //保存结果
   // res.saveAsTextFile(args(1))
    res.saveAsTextFile("D:\\ceshi\\out")
    sc.stop()
  }
}

(2)JavaWordCount

import org.apache.spark.SparkConf;
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;

public class JavaWordCount {
    public static void main(String[] args) {
        final SparkConf conf = new SparkConf().setAppName("JavaWc").setMaster("local[2]");

        final JavaSparkContext jsc = new JavaSparkContext(conf);
        //读文件,得到一个RDD
        //final JavaRDD<String> lines = jsc.textFile(args[0]);

        final JavaRDD<String> lines = jsc.textFile("D:\\ceshi\\input\\1.txt");

        //通过切分字符串,得到单词的集合
        final JavaRDD<String> words = lines.flatMap(new FlatMapFunction<String, String>() {
            @Override
            public Iterable<String> call(String s) {
                return Arrays.asList(s.split(" "));
            }
        });

        //把words变成一个元组
        final JavaPairRDD<String,Integer> tuples =words.mapToPair(new PairFunction<String, String, Integer>() {
            @Override
            public Tuple2<String, Integer> call(String s) throws Exception {
                return new Tuple2<>(s, 1);
            }
        });
        //聚合
        final JavaPairRDD<String,Integer> reduced = tuples.reduceByKey(new Function2<Integer, Integer, Integer>() {
            @Override
            public Integer call(Integer v1, Integer v2) throws Exception {
                return v1+v2;
            }
        });

        //单词和它出现的次数做一个颠倒,交换
        final JavaPairRDD<Integer,String> swaped = reduced.mapToPair(new PairFunction<Tuple2<String, Integer>, Integer, String>() {
            @Override
            public Tuple2<Integer, String> call(Tuple2<String, Integer> tup) throws Exception {
                return tup.swap();
            }
        });

        //排序
        final JavaPairRDD<Integer,String> sorted =swaped.sortByKey();

        //数据的一个位置交换
        final JavaPairRDD<String,Integer> res = sorted.mapToPair(new PairFunction<Tuple2<Integer, String>, String, Integer>() {
            @Override
            public Tuple2<String, Integer> call(Tuple2<Integer, String> tup) throws Exception {
                return tup.swap();
            }
        });

        //最后结果写到文件
       // res.saveAsTextFile(args[1]);
        res.saveAsTextFile("D:\\ceshi\\out");
        jsc.stop();

    }
}

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: Spark WordCount程序实现是通过Spark框架来实现对文本中单词出现次数的统计。具体实现步骤如下: 1. 读取文本文件:使用Spark的API读取文本文件,将文本文件转换为RDD(弹性分布式数据集)。 2. 切分单词:使用Spark的API对RDD中的每一行文本进行切分,将每个单词提取出来。 3. 映射单词:使用Spark的API将每个单词映射为一个键值对,其中键为单词,值为1。 4. 按键聚合:使用Spark的API对键值对进行聚合操作,将相同键的值相加,得到每个单词出现的次数。 5. 输出结果:将统计结果输出到文件或控制台。 通过以上步骤,就可以实现Spark WordCount程序的功能。 ### 回答2: Spark WordCount程序是一种基于分布式计算框架Spark的应用程序,用于统计文本文件中每个单词的出现次数。以下是该程序的实现思路: 1. 首先,我们需要将待处理的文本文件加载到Spark中。可以使用SparkContext的textFile函数将文本文件加载为一个RDD(弹性分布式数据集)。 2. 接下来,我们需要使用flatMap函数将每行文本拆分为单词,并生成一个包含所有单词的RDD。flatMap函数将输入的每个元素映射为一个或多个输出元素,并将所有输出元素合并为一个RDD。 3. 然后,我们可以使用map函数将每个单词映射为一个键值对,其中键是单词本身,值是1。这样可以方便后续的统计操作。通过这个map操作,我们将生成一个包含键值对的新RDD。 4. 接下来,我们可以使用reduceByKey函数对键值对进行聚合操作,即将具有相同键的值进行求和。这样我们就可以得到每个单词在文本中的出现次数。reduceByKey函数将RDD中具有相同键的元素进行合并,生成一个新的RDD,其中键是唯一的,值是合并操作的结果。 5. 最后,我们可以使用collect函数将最终结果收集回Driver程序中,然后进行输出或其他操作。 Spark WordCount程序的优点是可以并行地处理大规模的文本数据,充分利用了分布式计算的优势。Spark提供的函数式API和优化技术使得程序具有高性能和可靠性。 需要注意的是,在实际使用中,还可以进行一些优化操作,如缓存RDD、设置分区数等,以提高程序的性能。另外,如果文本文件较大,还可以考虑使用Hadoop的输入/输出格式进行输入输出的优化。 以上是Spark WordCount程序的简要实现思路。具体的代码实现可以参考Spark的官方文档或其他相关资源。 ### 回答3: Spark是一个开源的分布式计算框架,可以实现高速的数据处理和分析。WordCount程序是一个经典的示例,在Spark中用于统计文本中单词的出现频率。 首先,我们需要准备一个文本数据集,可以是一个文本文件或者是一个文本流。然后,使用Spark的API进行处理。 在Spark中,我们需要创建一个SparkContext对象,用于设置运行参数和连接集群。然后,使用SparkContext的textFile方法加载文本数据集。 接下来,我们需要进行一系列的转换操作,以完成WordCount的计算。第一步是将文本拆分为单词,可以使用flatMap方法将每一行的文本拆分为单词列表。 然后,使用map操作将每个单词映射为键值对的形式,键是单词本身,值初始化为1。接着,使用reduceByKey操作将相同键的值进行累加,得出每个单词的出现频率。 最后,可以使用collect方法将计算结果返回驱动程序,并打印出来。也可以将结果保存到一个文件中,使用saveAsTextFile方法。 总结起来,sparkwordcount程序的实现过程就是首先加载文本数据,然后进行拆分和映射等转换操作,最后进行聚合计算并输出结果。通过这个例子,我们可以了解到Spark的分布式计算的特点和操作方式。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值