使用 Spark 进行简单数据处理的实践(local 模式)

296 阅读1分钟

一、前言

Spark 是一个快速、通用的大规模数据处理和分析的开源集群计算框架,它能够在内存中进行高效的数据处理。本文将在 Windows 系统中,使用 Java 操作 Spark(loacl模式) 处理一个简单的文本文件,进行词频统计。另外,本文会提供针对语言模型的Prompt,以便于灵活使用。

二、数据准备

  • 准备一份 txt 文件

Prompt:请提供一份用于 Spark 词频统计的文本内容。

三、引入 Spark 依赖

  • 创建一个 Maven 项目,补充 spark-core 依赖。

适用于 spark 3.5.4 版本的 spark-core maven 的坐标是什么?

四、编写词频统计代码

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;

import java.util.Arrays;

/**
 * 词频统计!
 *
 */
public class App 
{
    public static void main( String[] args )
    {
        // 创建 Spark 配置对象
        SparkConf conf = new SparkConf()
                .setAppName("WordCount")
                .setMaster("local");// 使用本地所有可用核心

        // 创建 JavaSparkContext 对象
        JavaSparkContext sc = new JavaSparkContext(conf);
        
        // 读取文件,将文件内容转换为 RDD
        JavaRDD<String> lines = sc.textFile("spark-test.txt"); // 替换为实际文件路径

        // 将每行拆分为单词
        JavaRDD<String> words = lines.flatMap(line -> Arrays.asList(line.split(" ")).iterator());

        // 将每个单词映射为 (word, 1) 的键值对
        JavaPairRDD<String, Integer> wordPairs = words.mapToPair(word -> new Tuple2<>(word, 1));

        // 按单词进行聚合,计算词频
        JavaPairRDD<String, Integer> wordCounts = wordPairs.reduceByKey((a, b) -> a + b);

        // 打印词频统计结果
        wordCounts.collect().forEach(System.out::println);
        // 关闭 SparkContext
        sc.close();

    }
}