马上注册,结交更多数据大咖,获取更多知识干货,轻松玩转大数据
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
Spark应用源码下载见: Github Apache的Spark是通用的提供类似hadoop的MapReduce集群计算框架,拥有强大的抽象处理大型数据集。对于涉及到性能,功能和API种种原因,Spark正在变得比MapReduce更受欢迎。 该源码将教会你如何使用Scala学习如何编写,编译和运行一个Spark简单的应用程序。这个案例是一个单词计数WordCount, 这是最经典的MapReduce应用,在字数统计这个案例中,我们的目标是在在我们的语料库的字母中找出最流行的词汇分布。 1. 读入一个文本文档的输入。
2.统计每个单词出现的次数。
3.筛选少于1百万次的所有单词。
3.对于剩余的结果,统计每个字母的次数。 在MapReduce的,这将需要两个MapReduce工作以及在它们之间持续中间数据到HDFS。相反在Spark中,你可以用更少的代码大约90%行写一个作业。 我们的输入文档是剥离标点符号的一个巨大的文本文件。完整的Scala程序看起来像这样: import org.apache.spark.SparkContext import org.apache.spark.SparkContext._ import org.apache.spark.SparkConf
object SparkWordCount { def main(args: Array[String]) { val sc = new SparkContext(new SparkConf().setAppName("Spark Count")) val threshold = args(1).toInt
// split each document into words val tokenized = sc.textFile(args(0)).flatMap(_.split(" "))
// count the occurrence of each word val wordCounts = tokenized.map((_, 1)).reduceByKey(_ + _)
// filter out words with less than threshold occurrences val filtered = wordCounts.filter(_._2 >= threshold)
// count characters val charCounts = filtered.flatMap(_._1.toCharArray).map((_, 1)).reduceByKey(_ + _)
System.out.println(charCounts.collect().mkString(", ")) } } Spark 使用 "lazy evaluation", 意味着转换只有一个action操作被调用时才会在集群中执行,action操作在这个案例是collect收集,将数据拉到客户端然后saveAsTextFile, 也就是将数据写到一个类似HDFS文件系统中. 值得注意的是,Spark的 "reduce"稍微区别于MapReduce. 在MapReduce一个reduce函数调用接受一个规定Key的所有记录,而在Spark,只接受两个参数,Spark的reduce类似mao的groupBy操作。 详细配置见英文
|