java,spark算子对文本文件内的每个单词都统计出其出现的次数; 按照每个单词出现次数的数量,降序排序。
时间: 2023-12-19 19:07:49 浏览: 107
统计指定的文本文件(英文)中,每个单词的出现频率,输出按字典序排列的单词频度表。
下面是Java代码实现,使用Spark框架中的RDD来进行文本文件的读取和处理:
```java
import java.util.Arrays;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
public class WordCount {
public static void main(String[] args) {
// 创建 SparkContext
JavaSparkContext sc = new JavaSparkContext("local[*]", "WordCount");
// 读取文本文件
JavaRDD<String> lines = sc.textFile("input.txt");
// 将每行文本拆分为单词
JavaRDD<String> words = lines.flatMap(line -> Arrays.asList(line.split(" ")).iterator());
// 对单词进行计数
JavaRDD<Tuple2<String, Integer>> wordCounts = words.mapToPair(word -> new Tuple2<>(word, 1))
.reduceByKey((x, y) -> x + y);
// 按照单词出现次数的数量进行降序排序
JavaRDD<Tuple2<String, Integer>> sortedWordCounts = wordCounts.sortBy(tuple -> tuple._2, false);
// 输出结果
sortedWordCounts.collect().forEach(System.out::println);
// 关闭 SparkContext
sc.stop();
}
}
```
以上代码中,假设文本文件的路径为`input.txt`。首先使用`JavaSparkContext`创建SparkContext对象,然后使用`textFile`方法读取文本文件,得到一个包含每行文本的RDD对象`lines`。接着使用`flatMap`方法将每行文本拆分为单词,并得到一个包含所有单词的RDD对象`words`。使用`mapToPair`方法将每个单词映射为一个键值对,其中键为单词本身,值为1,然后使用`reduceByKey`方法对相同键的值进行累加,得到一个包含每个单词出现次数的RDD对象`wordCounts`。最后使用`sortBy`方法对`wordCounts`进行降序排序,得到一个包含每个单词及其出现次数的元组的RDD对象`sortedWordCounts`,并将结果输出到控制台。最后使用`stop`方法关闭SparkContext对象。
阅读全文