2024-08-07

Spark的"经典demo"通常指的是WordCount程序,它用于统计文本文件中每个单词出现的次数。以下是Scala和Java两种语言的实现。

Scala版本:




import org.apache.spark.{SparkConf, SparkContext}
 
object WordCount {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setAppName("WordCount")
    val sc = new SparkContext(conf)
 
    val textFile = sc.textFile("hdfs://path/to/input/file.txt")
    val wordCounts = textFile.flatMap(_.split("\\s+")).map(word => (word, 1)).reduceByKey(_ + _)
    wordCounts.saveAsTextFile("hdfs://path/to/output/directory")
 
    sc.stop()
  }
}

Java版本:




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 scala.Tuple2;
 
public class WordCount {
    public static void main(String[] args) {
        SparkConf conf = new SparkConf().setAppName("WordCount");
        JavaSparkContext sc = new JavaSparkContext(conf);
 
        JavaRDD<String> textFile = sc.textFile("hdfs://path/to/input/file.txt");
        JavaRDD<String> words = textFile.flatMap(s -> Arrays.asList(s.split("\\s+")).iterator());
        JavaPairRDD<String, Integer> wordCounts = words.mapToPair(s -> new Tuple2<>(s, 1)).reduceByKey((x, y) -> x + y);
        wordCounts.saveAsTextFile("hdfs://path/to/output/directory");
 
        sc.stop();
    }
}

在这两个例子中,我们首先设置了Spark的配置并创建了一个SparkContext对象。然后,我们读取了一个文本文件,将其分割成单词,并为每个单词设置了计数1,接着通过reduceByKey来累加相同单词的计数。最后,我们将结果保存到指定的文件系统路径。代码中的HDFS路径需要替换为实际的输入文件路径和输出目录路径。