多种语言开发Spark-以WordCount为例

Spark是目前最火爆的大数据计算框架,有赶超Hadoop MapReduce的趋势。因此,趁着现在还有大多数人不懂得Spark开发的,赶紧好好学习吧,为了使不同的开发人员能够很好的利用Spark,Spark官方提供了不同开发语言的API,本文以大数据经典入门案例WordCount为例,开发多个版本的Spark应用程序,以满足不同的开发人员需求。

一、Scala:

  

    val conf: SparkConf = new SparkConf().setMaster("local")
    val sc: SparkContext = new SparkContext(conf)
    sc.textFile("test")
      .flatMap(line => {
        line.split("\t")
      })
      .mapPartitions(iter => {
        val list: List[(String, Int)] = List[(String, Int)]()
        iter.foreach(word => {
          list.::((word,1))
        })
        list.iterator
      })
      .reduceByKey(_ + _)
      .saveAsTextFile("result")

二、JDK1.7及以下版本:

  

SparkConf conf = new SparkConf().setAppName("JavaSparkTest").setMaster("local");
        JavaSparkContext sc = new JavaSparkContext(conf);
sc.textFile("test")
        .flatMap(new FlatMapFunction<String, String>() {
            @Override
            public Iterable<String> call(String t) throws Exception {
                return Arrays.asList(t.split("\t"));
            }
        }).mapToPair(new PairFunction<String, String, Integer>() {

            @Override
            public Tuple2<String, Integer> call(String t) throws Exception {
                return new Tuple2<String, Integer>(t, 1);
            }

        }).reduceByKey(new Function2<Integer, Integer, Integer>() {

            @Override
            public Integer call(Integer v1, Integer v2) throws Exception {
                return v1+v2;
            }
        }).saveAsTextFile("result");

三、JDK1.8:

  由于JDK1.8加入了新特性——函数式编程,因此,可以利用JDK1.8的新特性简化Java开发Spark的语句。

SparkConf conf = new SparkConf().setAppName("JavaSparkTest").setMaster("local");
JavaSparkContext sc = new JavaSparkContext(conf);
sc.textFile("test")
        .flatMap(line -> {
            return Arrays.asList(line.split("\t"));
        }).mapToPair(word -> {
            return new Tuple2<String, Integer>(word, 1);
        }).reduceByKey((x, y) -> {
            return x + y;
        }).saveAsTextFile("result");

  是不是觉得比上述的Scala还简洁呢?其实是这样的,Scala中使用了mapPartitions是对map函数的优化,即对每一个RDD的分区进行map操作,这样就减少了对象的创建,从而加速了计算。而Java中,通过我的测试,不能使用mapPartitions方法进行上述优化,只能使用map方法(不知道为啥),这样也可以使用,但是在大数据集面前,其性能就逊色于mapPartitions了。

四、Python:

from pyspark import SparkContext
from pyspark import SparkConf as conf
conf.setAppName("WordCount").setMaster("local")
sc = SparkContext(conf)

text_file = sc.textFile("test")    .flatMap(lambda line: line.split("\t"))    .map(lambda word: (word, 1))    .reduceByKey(lambda x, y: x + y)    .saveAsTextFile("test")
时间: 2024-07-28 14:45:51

多种语言开发Spark-以WordCount为例的相关文章

使用java开发spark的wordcount程序

package spark; 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.sql.SparkSession; import scala.Tuple2

使用Scala语言开发Spark应用程序是自然而然的事情

http://www.duobei.com/people/7538433528http://www.duobei.com/people/4472080605http://www.duobei.com/people/3262037714http://www.duobei.com/people/3546766534http://www.duobei.com/people/7508788406http://www.duobei.com/people/7508788406http://www.duobe

使用Scala语言开发Spark应用程序是

http://www.duobei.com/people/7538433528http://www.duobei.com/people/3546766534http://www.duobei.com/people/3262037714http://www.duobei.com/people/4472080605http://www.duobei.com/people/7508788406http://www.duobei.com/people/7508788406http://www.duobe

IntelliJ IDEA开发Spark的Maven项目Scala语言

1.Maven管理项目在JavaEE普遍使用,开发Spark项目也不例外,而Scala语言开发Spark项目的首选.因此需要构建Maven-Scala项目来开发Spark项目,本文采用的工具是IntelliJ IDEA 2016,IDEA工具越来越被大家认可,开发java, python ,scala 支持都非常好,安装直接下一步即可. 2.安装scala插件,File->Settings->Editor->Plugins,搜索scala即可安装. 3.创建Maven工程,File-&g

编写Spark的WordCount程序并提交到集群运行[含scala和java两个版本]

编写Spark的WordCount程序并提交到集群运行[含scala和java两个版本] 1. 开发环境 Jdk 1.7.0_72 Maven 3.2.1 Scala 2.10.6 Spark 1.6.2 Hadoop 2.6.4 IntelliJ IDEA 2016.1.1 2. 创建项目1) 新建Maven项目 2) 在pom文件中导入依赖pom.xml文件内容如下: <?xml version="1.0" encoding="UTF-8"?> &l

Spark3000门徒第10课Java开发Spark实战总结

今晚听了王家林老师的第10课Java开发Spark实战,课后作业是:用Java方式采用Maven开发Spark的WordCount并运行在集群中 先配置pom.xml <groupId>com.dt.spark</groupId> <artifactId>SparkApps</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging

在myeclipse中使用Java语言进行spark Standalone模式应用程序开发

一.环境配置 Myeclipse中虽然已经集成了maven插件,但是由于这个插件版本较低,建立maven project会出现错误. 解决办法:自己到官网http://maven.apache.org/下载最新版本的maven插件,解压,在环境变量中注册. 新建环境变量M2_HOME 在PATH里加入maven的bin的路径 配置完毕后,在Windows命令提示符下,输入mvn -v测试一下,配置成功显示如图: 配置成功后,还需要在Myeclipse中用新的maven插件将就得替换掉,如图: 二

提交任务到spark(以wordcount为例)

1.首先需要搭建好hadoop+spark环境,并保证服务正常.本文以wordcount为例. 2.创建源文件,即输入源.hello.txt文件,内容如下: tom jerry henry jim suse lusy 注:以空格为分隔符 3.然后执行如下命令: hadoop fs -mkdir -p /Hadoop/Input(在HDFS创建目录) hadoop fs -put hello.txt /Hadoop/Input(将hello.txt文件上传到HDFS) hadoop fs -ls

在Windows平台搭建C语言开发环境的多种方式

新接触C语言,如何进行C语言开发环境的搭建值得思考并整理 注:本文知识来源于  Windows 平台搭建C语言集成开发环境 - 极客学院 一.在Windows平台配置GNU环境 二.在Windows平台使用Sublime Test开发C语言程序 三.在Windows平台使用VisualStudio开发C语言程序 四.在Windows平台搭建EclipseCDT集成开发环境 五.在Windows平台搭建Clion集成开发环境 一.在Windows平台配置GNU环境 GNU http://www.g