Spark wordcount - Python, Scala, Java

本文介绍了如何使用Spark在Python、Scala和Java三种语言中实现经典的分布式单词计数任务。通过对文本文件进行处理,将其拆分为单词并进行计数,最终得到每个单词出现的频率。

基于Spark实现的Python, Scala, Java三个版本的、经典的分布式单词计数代码。


1. Scala

val input = sc.textFile("hdfs://...")
val words = input.flatMap(x => x.split(" "))
val result = words.map(x => (x, 1)).reduceByKey((x, y) => x + y).persist()

println(result.collect().mkString("\n"))  //collect()在数据量比较小、单机内存能装载下时可以使用


2.Python

rdd = sc.textFile("s3://...")
words = rdd.flatMap(lambda x: x.split(" "))
result = words.map(lambda x: (x, 1)).reduceByKey(lambda x, y: x + y)


3.Java

JavaRDD<String> input = sc.textFile("s3://...")
JavaRDD<String> words = rdd.flatMap(new FlatMapFunction<String, String>() {
public Iterable<String> call(String x) { return Arrays.asList(x.split(" ")); }
});
JavaPairRDD<String, Integer> result = words.mapToPair(
new PairFunction<String, String, Integer>() {
public Tuple2<String, Integer> call(String x) { return new Tuple2(x, 1); }
}).reduceByKey(
new Function2<Integer, Integer, Integer>() {
public Integer call(Integer a, Integer b) { return a + b; }
});



头歌平台上关于使用 Python 进行 Spark 算子操作的资料有,在第 9 关“Transformations - reduceByKey”中,给出了使用 Python 实现 Spark 的 `reduceByKey` 算子的示例代码。该代码实现了对 RDD 中元素(key - value)的 value 累加操作,具体代码如下: ```python # -*- coding: UTF-8 -*- from pyspark import SparkContext if __name__ == "__main__": # 1.初始化 SparkContext,该对象是 Spark 程序的入口 sc = SparkContext("local", "Simple App") # 2.创建一个内容为[("python", 1), ("scala", 2), ("python", 3), ("python", 4), ("java", 5)]的列表List data = [("python", 1), ("scala", 2), ("python", 3), ("python", 4), ("java", 5)] # 3.通过 SparkContext 并行化创建 rdd rdd = sc.parallelize(data) # 4.使用rdd.collect() 收集 rdd 的元素 print(rdd.collect()) """ 使用 reduceByKey 算子,将 rdd 的数据[("python", 1), ("scala", 2), ("python", 3), ("python", 4), ("java", 5)] 按照下面的规则进行转换操作,规则如下: 需求: 元素(key-value)的value累加操作,例如: (1,1),(1,1),(1,2) --> (1,4) (1,1),(1,1),(2,2),(2,2) --> (1,2),(2,4) """ # 5.使用 reduceByKey 算子完成以上需求 result = rdd.reduceByKey(lambda x, y: x + y) # 6.使用rdd.collect() 收集完成 reduceByKey 转换的元素 print(result.collect()) # 7.停止 SparkContext sc.stop() ``` 另外,在第 1 关“WordCount - 词频统计”中,展示了使用 Python 实现 Spark 算子进行词频统计的代码,通过 `flatMap`、`map`、`reduceByKey` 和 `sortBy` 等算子对本地文件 `/root/wordcount.txt` 内容进行词频统计,代码如下: ```python # -*- coding: UTF-8 -*- from pyspark import SparkContext if __name__ == "__main__": """ 需求:对本地文件系统URI为:/root/wordcount.txt 的内容进行词频统计 """ # ********** Begin **********# sc = SparkContext("local","pySpark") rdd = sc.textFile("/root/wordcount.txt") values = rdd.flatMap(lambda x:str(x).split(" ")).map(lambda x:(x,1)).reduceByKey(lambda x,y:x+y).sortBy(lambda x:tuple(x)[1],False) print(values.collect()) # ********** End **********# ``` 上述代码均来自头歌平台,可用于学习 Python 实现 Spark 算子操作 [^1][^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值