欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > 写spark程序数据计算( 数据库的计算,求和,汇总之类的)连接mysql数据库,写入计算结果

写spark程序数据计算( 数据库的计算,求和,汇总之类的)连接mysql数据库,写入计算结果

2025/5/19 19:58:22 来源:https://blog.csdn.net/2301_80936715/article/details/148049984  浏览:    关键词:写spark程序数据计算( 数据库的计算,求和,汇总之类的)连接mysql数据库,写入计算结果

1. 添加依赖

在项目的 `pom.xml`(Maven)中添加以下依赖:

```xml

<!-- Spark SQL -->

<dependency>

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

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

    <version>3.3.0</version>

</dependency>

 

<!-- MySQL Connector -->

<dependency>

    <groupId>mysql</groupId>

    <artifactId>mysql-connector-java</artifactId>

    <version>8.0.33</version>

</dependency>

代码

import org.apache.spark.sql.{SparkSession, SaveMode}

object SparkMySQLDemo {
  def main(args: Array[String]): Unit = {
    // 创建 SparkSession
    val spark = SparkSession.builder()
      .appName("SparkMySQLDemo")
      .master("local[*]") // 生产环境需改为集群模式,如 yarn
      .config("spark.sql.shuffle.partitions", "5") // 优化分区数
      .getOrCreate()

    // 设置 MySQL 连接参数
    val jdbcUrl = "jdbc:mysql://localhost:3306/your_database"
    val jdbcUsername = "your_username"
    val jdbcPassword = "your_password"

    try {
      // 从 MySQL 读取数据
      val df = spark.read
        .format("jdbc")
        .option("url", jdbcUrl)
        .option("dbtable", "source_table") // 要读取的表名
        .option("user", jdbcUsername)
        .option("password", jdbcPassword)
        .load()

      // 执行计算(示例:按 category 分组求和)
      val resultDF = df.groupBy("category")
        .agg(
          sum("amount").alias("total_amount"),
          count("*").alias("record_count")
        )

      // 打印计算结果(调试用)
      resultDF.show()

      // 将结果写入 MySQL
      resultDF.write
        .format("jdbc")
        .option("url", jdbcUrl)
        .option("dbtable", "result_table") // 目标表名
        .option("user", jdbcUsername)
        .option("password", jdbcPassword)
        .mode(SaveMode.Append) // 写入模式:覆盖/追加
        .save()

      println("数据写入 MySQL 成功!")
    } catch {
      case e: Exception => e.printStackTrace()
    } finally {
      spark.stop()
    }
  }
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词