深入浅出:Eclipse 中配置 Maven 与 Spark 应用开发全指南

Spark

  1. 安装配置

1.在 Eclipse 中配置 Maven

Eclipse 中默认自带 Maven 插件,但是自带的 Maven 插件不能修改本地仓库,所

以通常我们不使用自带的 Maven ,而是使用自己安装的,在 Eclipse 中配置 Maven 的

步骤如下:

  1. 点击 Eclipse 中的 Window → Preferences

  2. 点开 Maven 前面的箭头,选择 Installations,点击 Add...

  1. 点击 Directory...选择我们安装的 Maven 核心程序的根目录,然后点击 Finish
  1. 勾上添加的 Maven 核心程序

  2. 选择 Maven 下的 User Settings ,在全局设置哪儿点击 Browse... 选择 Maven

核心程序的配置文件 settings.xml ,本地仓库会自动变为我们在 settings.xml

文件中设置的路径

修改setting内容:

html 复制代码
<profile>

      <id>jdk-1.8</id>

        <activation>

                 <activeByDefault>true</activeByDefault>

                <jdk>1.8</jdk>

        </activation>

<properties>

<maven.compiler.source>1.8</maven.compiler.source>

<maven.compiler.target>1.8</maven.compiler.target>

<maven.compiler.compilerversion>1.8</maven.compiler.compilerversion>

</properties>

</profile>
  1. 在 Eclipse 中创建 Maven 项目

2.1 创建 Java 工程

  1. 点击 File → New → Maven Project ,弹出如下窗口

  2. 点击 Next,配置坐标(GAV)及打包方式,然后点击 Finish

group id:组织id

artifact id:项目名字

version:版本

package:java包名

  1. 创建成功后, 配置 Maven 的核心配置文件 pom.xml 文件
XML 复制代码
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">

  <modelVersion>4.0.0</modelVersion>

  <groupId>me.spark.app</groupId>

  <artifactId>playersStats</artifactId>

  <version>1.0</version>

  <name>playersStats</name>

  <!-- FIXME change it to the project's website -->

  <url>http://www.example.com</url>

  <properties>

    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

    <maven.compiler.source>1.8</maven.compiler.source>

    <maven.compiler.target>1.8</maven.compiler.target>

  </properties>

  <dependencies>

    <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-assembly-plugin -->

        <dependency>

      <groupId>org.apache.maven.plugins</groupId>

      <artifactId>maven-assembly-plugin</artifactId>

      <version>3.3.0</version>

    </dependency>

      <!-- https://mvnrepository.com/artifact/org.apache.spark/spark-core -->

      <dependency>

      <groupId>org.apache.spark</groupId>

      <artifactId>spark-core_2.12</artifactId>

      <version>3.0.0</version>

    </dependency>

    <!-- https://mvnrepository.com/artifact/org.apache.spark/spark-sql -->

        <dependency>

      <groupId>org.apache.spark</groupId>

      <artifactId>spark-sql_2.12</artifactId>

      <version>3.0.0</version>

    </dependency>

  </dependencies>

  <build>

        <plugins>

        <plugin>

            <artifactId>maven-assembly-plugin</artifactId>

            <version>3.3.0</version>

            <configuration>

          <descriptorRefs>

            <descriptorRef>jar-with-dependencies</descriptorRef>

          </descriptorRefs>

        <archive>

          <manifest>

            <mainClass>me.spark.app.playersStats.Main</mainClass>

          </manifest>

        </archive>

        </configuration>

        <executions>

            <execution>

                <id>make-assembly</id> <!-- this is used for inheritance merges -->

                <phase>package</phase> <!-- bind to the packaging phase -->

                <goals>

                <goal>single</goal>

                </goals>

            </execution>

        </executions>

      </plugin>

    </plugins>

  </build>

</project>
  1. 模板

1. Spark 应用基本模板

这是 Spark 应用程序的基本结构,适用于所有 Spark 程序的起点。

java 复制代码
import org.apache.spark.sql.SparkSession;



public class MySparkApp {

    public static void main(String[] args) {

        // 创建 SparkSession,应用程序入口

        SparkSession spark = SparkSession.builder()

                .appName("MySparkApp")

                .master("local")  // 本地模式

                .getOrCreate();



        // 你的 Spark 代码在这里编写



        // 关闭 SparkSession

        spark.stop();

    }

}

2. DataFrame 操作模板

DataFrame 是 Spark 进行结构化数据处理的核心 API,特别适合处理 CSV、JSON、Parquet 等格式的文件。以下是通过 DataFrame 进行数据处理的模板。

java 复制代码
import org.apache.spark.sql.Dataset;

import org.apache.spark.sql.Row;

import org.apache.spark.sql.SparkSession;

import static org.apache.spark.sql.functions.*;



public class MyDataFrameApp {

    public static void main(String[] args) {

        // 创建 SparkSession

        SparkSession spark = SparkSession.builder()

                .appName("DataFrameExample")

                .master("local")

                .getOrCreate();



        // 读取 CSV 文件为 DataFrame

        Dataset<Row> df = spark.read()

                .option("header", "true") // 是否包含头部

                .option("inferSchema", "true") // 自动推断列类型

                .csv("path/to/your/csvfile.csv");



        // 打印 DataFrame 的结构

        df.printSchema();

       

        // 显示前20行数据

        df.show();



        // 数据处理:计算某列的平均值

        df.groupBy("column_name")

          .agg(avg("another_column").alias("average_value"))

          .show();



        // 关闭 SparkSession

        spark.stop();

    }

}

3. RDD 操作模板

RDD(Resilient Distributed Dataset)是 Spark 的底层 API,适合处理非结构化数据,特别是在数据量较大时。以下是通过 RDD 进行数据处理的模板。

java 复制代码
import org.apache.spark.api.java.JavaRDD;

import org.apache.spark.api.java.JavaSparkContext;

import org.apache.spark.SparkConf;



public class MyRDDApp {

    public static void main(String[] args) {

        // 配置 Spark

        SparkConf conf = new SparkConf().setAppName("RDDExample").setMaster("local");

        JavaSparkContext sc = new JavaSparkContext(conf);



        // 读取文本文件为 RDD

        JavaRDD<String> lines = sc.textFile("path/to/your/file.txt");



        // 简单的 WordCount 示例

        JavaRDD<String> words = lines.flatMap(line -> Arrays.asList(line.split(" ")).iterator());

        JavaRDD<Tuple2<String, Integer>> wordCounts = words.mapToPair(word -> new Tuple2<>(word, 1))

                .reduceByKey((a, b) -> a + b);



        // 打印结果

        wordCounts.collect().forEach(System.out::println);



        // 关闭 SparkContext

        sc.close();

    }

}

4. Spark SQL 模板

Spark SQL 允许你使用 SQL 查询来处理结构化数据。以下是 Spark SQL 的使用模板,适合数据分析任务。

java 复制代码
import org.apache.spark.sql.Dataset;

import org.apache.spark.sql.Row;

import org.apache.spark.sql.SparkSession;



public class MySQLApp {

    public static void main(String[] args) {

        // 创建 SparkSession

        SparkSession spark = SparkSession.builder()

                .appName("SQLExample")

                .master("local")

                .getOrCreate();



        // 读取 CSV 文件为 DataFrame

        Dataset<Row> df = spark.read()

                .option("header", "true")

                .option("inferSchema", "true")

                .csv("path/to/your/csvfile.csv");



        // 注册临时表

        df.createOrReplaceTempView("my_table");



        // 使用 SQL 查询数据

        Dataset<Row> result = spark.sql("SELECT column_name, COUNT(*) FROM my_table GROUP BY column_name");



        // 显示查询结果

        result.show();



        // 关闭 SparkSession

        spark.stop();

    }

}

5. 数据读取与写入模板

Spark 支持多种数据源的读取和写入,如 CSV、JSON、Parquet、JDBC 等。以下是常见的读取和写入数据的操作模板。

读取 CSV 数据
Scala 复制代码
Dataset<Row> df = spark.read()

        .option("header", "true")

        .option("inferSchema", "true")

        .csv("path/to/csvfile.csv");
读取 JSON 数据
Scala 复制代码
Dataset<Row> df = spark.read()

        .json("path/to/jsonfile.json");
读取 Parquet 数据
Scala 复制代码
Dataset<Row> df = spark.read()

        .parquet("path/to/parquetfile.parquet");
写入数据到 CSV 文件
Scala 复制代码
df.write()

  .option("header", "true")

  .csv("path/to/output_csv/");
写入数据到 Parquet 文件
Scala 复制代码
df.write()

  .parquet("path/to/output_parquet/");

6. Spark Streaming 模板

Spark Streaming 处理实时流数据。以下是通过 Spark Streaming 进行数据处理的模板。

Scala 复制代码
import org.apache.spark.SparkConf;

import org.apache.spark.streaming.Durations;

import org.apache.spark.streaming.api.java.JavaStreamingContext;



public class MyStreamingApp {

    public static void main(String[] args) throws InterruptedException {

        // 配置 Spark Streaming

        SparkConf conf = new SparkConf().setAppName("StreamingExample").setMaster("local[2]");

        JavaStreamingContext streamingContext = new JavaStreamingContext(conf, Durations.seconds(1));



        // 监听 socket 数据源

        JavaReceiverInputDStream<String> lines = streamingContext.socketTextStream("localhost", 9999);



        // 处理数据:简单的 WordCount

        JavaDStream<String> words = lines.flatMap(line -> Arrays.asList(line.split(" ")).iterator());

        JavaPairDStream<String, Integer> wordCounts = words.mapToPair(word -> new Tuple2<>(word, 1))

                .reduceByKey((a, b) -> a + b);



        // 输出结果

        wordCounts.print();



        // 启动流处理

        streamingContext.start();

        streamingContext.awaitTermination();

    }

}
相关推荐
LinuxGeek102422 分钟前
Kylin-Server-V11、openEuler-22.03和openEuler-24.03适配原生rpm的MySQL 8.4.11版本正式发布
大数据·mysql·kylin
2601_9625029026 分钟前
点胶点钻机运动控制与视觉定位系统解析:精度、算法与工程实现
大数据·架构
阿部多瑞 ABU1 小时前
正反馈的死亡螺旋:数字资本时代泛二次元文化-情感-金融复合体的系统性分析
大数据·人工智能·金融
zhbcddxr2 小时前
GEO服务商度量监测能力测评:可见度追踪与报表排行
大数据·人工智能·microsoft
科技发布2 小时前
拆解传播易服务模式,看清小红书团购从入驻变现完整逻辑
大数据·人工智能
智道天成3 小时前
杭州智道天成信息科技有限公司:助力浙江企业合规高效落地
大数据·人工智能·科技
一只鹿鹿鹿3 小时前
三甲综合智慧医院信息化总体解决方案(PPT文件)
大数据·运维·物联网·安全·政务
java1234_小锋4 小时前
【免费】基于Spark实时交通流量分析与拥堵预测系统(Java版本+可视化大屏+Kafka+SpringBoot+Vue3) 锋哥原创出品,必属精品
java·大数据·spark·kafka·实时交通流量分析与拥堵预测
天国梦4 小时前
智习室英语学习工具选型指南:2026年品牌合作筛选方法与落地评估
大数据·人工智能
瓦学妹4 小时前
为什么您的AI总是显示“不支持的区域”?如何解决?
大数据·网络·人工智能