Spark学习1-wordcount

本文记录了作者在工作中使用Spark的经历及心得。从开发工具选择到构建工具配置,再到经典的WordCount案例解析,最后分享了如何在集群上运行Spark程序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

闲扯

好久没写博客了,大概有半年了,最近半年发生了不少事情,自己毕业两年了,本想跳槽离开的,但是貌似习惯了现在公司的工作习惯,其实是工资涨得还算满意,所以就留下了(说得好没追求啊~)。前段时间我们team的负责人跳槽走了,所有很多技术都需要自己钻研,其实也是一个蛋疼但是提高挺快的过程,最近利用工作之余的时间一直在研究spark,在公司申请了4台机器用CDH搭建了一个集群,包括了Spark,版本貌似是1.3.0。接下去就说说我spark的学习介绍吧~

开发工具的选择

之前的开发一直是基于eclipse的,所以刚开始学习spark是用的eclipse,首先安装的是scala的插件,学习了一段时间scala,后来发现intellij比较适合写scala代码,就换了该IDE,这里就不说此IDE有多好用了,反正喜欢他的界面风格,很帅气。
scala的构建工具使用的是sbt,其实跟maven和gradle差不多,用用就习惯了。公司的maven仓库特别旧,不包含scala和spark的jar包,所以build.sbt就需要多加些resolvers,如下:

name := "SparkLearning"

version := "1.0"

scalaVersion := "2.10.4"

resolvers += "maven2" at "http://repo1.maven.org/maven2"

resolvers += "Typesafe repository" at "http://repo.typesafe.com/typesafe/releases"

resolvers += "public-local" at "http://192.168.88.8:8081/nexus/content/groups/public"

resolvers += "oschina" at "http://maven.oschina.net/content/groups/public"

libraryDependencies ++= Seq(
  "org.apache.spark" % "spark-core_2.10" % "1.3.0",
  "org.apache.spark" % "spark-streaming_2.10" % "1.3.0",
  "org.apache.spark" % "spark-mllib_2.10" % "1.3.0"
)
这里包含了spark一些相关的类库,不做介绍了。

word count

大家都知道wordcount是大数据界等同于hello world的代码,所以我们先从word count来说起。
首先直接上代码:

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

object WordCount {

  def main(args: Array[String]) {
    if (args.length != 3) {
      println("参数不对")
      println("参数1: 输入文件位置")
      println("参数2: 输出文件位置")
      println("参数3: spark执行内存大小")
    } else {
      val conf = new SparkConf()
        .setAppName("word count")
        .set("spark.executor.memory", args(2))
      val sc = new SparkContext(conf)

      val lines = sc.textFile(args(0))
      val wordCount = lines.flatMap(_.split("\\s+")).map(x => (x, 1)).reduceByKey(_ + _)
      wordCount.saveAsTextFile(args(1))
    }
  }
}
其实会点简单的scala代码就可以写spark程序了,对于该程序我们做些解释:
1. 首先我们的数据应该是一行一行的英文单词,flatMap将每行的内容按照空格切分成单词,得到的数据如:a b c d
2. map(x => (x, 1))将第一步的数据map成a 1, b 1, c 1, d 1这样的格式
3. reduceByKey(_ + _) 根据key进行分组然后讲value进行sum,这样就得到了结果
4. wordCount.saveAsTextFile(args(1))  是将rdd save到hdfs上,参数是hdfs的路径

代码如何运行

  1. 可以先用测试数据在spark-shell中执行
  2. 在集群上提交:
    a. sbt clean package 打成jar包并上传到集群的master节点
    b. spark-submit –class xxx.xxx.xxx.WordCount xxx.jar 参数1 参数2 参数3
    c. spark-submit的参数有很多,大家可以去网上查查

后续

接下去一段时间将会继续更新spark的学习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值