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路径需要替换为实际的输入文件路径和输出目录路径。