在spark中操作mysql数据 ---- spark学习之七

本文介绍如何使用Spark的DataFrame API操作MySQL数据库,包括加载数据、执行SQL查询、分组统计及结果输出等步骤。

使用spark的 DataFrame 来操作mysql数据。

DataFrame是比RDD更高一个级别的抽象,可以应用SQL语句进行操作,详细参考:

https://spark.apache.org/docs/latest/sql-programming-guide.html

 

这里暂时使用spark-shell进行操作,

1.首先,必须要先下载一个mysql的jdbc的驱动

可以从这里下载

2.然后呢,就好办了。

复制代码
#具体的启动spark-shell的方法(带上mysql的driver)
$~/spark-shell --driver-class-path /path-to-mysql-jar/mysql-connector-java-5.1.34-bin.jar

#定义mysql的信息
val url="jdbc:mysql://10.181.176.226:3306/geo_info"
val prop = new java.util.Properties
prop.setProperty("user","geo")
prop.setProperty("password","xxxxxx”)

#指定读取条件,这里 Array("country_code='CN'") 是where过滤条件
val cnFlight = sqlContext.read.jdbc(url,"gps_location",Array("country_code='CN'"),prop)

#然后进行groupby 操作,获取数据集合
val emailList = cnFlight.groupBy("gps_city", "user_mail”)

#计算数目,并根据数目进行降序排序
val sorted = emailList.count().orderBy( desc("count") )

#显示前10条
sorted.show(10)

#存储到文件(这里会有很多分片文件。。。)
sorted.rdd.saveAsTextFile("/home/qingpingzhang/data/flight_top”)


#存储到mysql表里
sorted.write.jdbc(url,"table_name",prop)
复制代码

 

3.具体文件编写代码,然后提交worker也类似,主要是DataFrame的 sqlContext声明会不一样。

val sc: SparkContext // An existing SparkContext.
val sqlContext = new org.apache.spark.sql.SQLContext(sc)

 这里如果要用spark-submit,则会有坑,即便你是用sbt的assembly来打包的一个全的jar包:

参考:http://www.iteblog.com/archives/1300

[itelbog@iteblog ~]$  bin/spark-submit --master local[2]     --driver-class-path lib/mysql-connector-java-5.1.35.jar    --class  spark.SparkToJDBC ./spark-test_2.10-1.0.jar
在IntelliJ IDEA中编写Scala代码使用Spark操作MySQL数据,可按以下步骤进行: ### 环境准备 - 安装Scala和Spark,如在Windows下安装本地2.11.11版本的Scala、spark - 2.4.3 - bin - hadoop2.7版本的Spark、hadoop2.7.7本地版本,若未安装需先完成安装 [^3]。 - 在IntelliJ IDEA上安装Scala插件,该插件提供完整的Scala语言支持,包括语法高亮、代码自动完成、语法检查、错误提示等功能,还允许在IDEA中编译和运行Scala项目,并且与SBT集成,方便管理和构建Scala项目 [^2]。 - 项目依赖管理可使用Maven,避免手动添加Libraries可能出现的依赖加载不成功等问题,Maven管理的包会自动生成相关配置 [^4]。在`pom.xml`中添加SparkMySQL Connector的依赖: ```xml <dependencies> <!-- Spark Core --> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_2.11</artifactId> <version>2.4.3</version> </dependency> <!-- Spark SQL --> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-sql_2.11</artifactId> <version>2.4.3</version> </dependency> <!-- MySQL Connector --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.26</version> </dependency> </dependencies> ``` ### 编写Scala代码 ```scala import org.apache.spark.sql.SparkSession object SparkMySQLExample { def main(args: Array[String]): Unit = { // 创建SparkSession val spark = SparkSession.builder() .appName("SparkMySQLExample") .master("local[*]") .getOrCreate() // 定义数据库连接信息 val jdbcUrl = "jdbc:mysql://localhost:3306/your_database_name" val connectionProperties = new java.util.Properties() connectionProperties.put("user", "your_username") connectionProperties.put("password", "your_password") // 从MySQL读取数据 val df = spark.read .jdbc(jdbcUrl, "your_table_name", connectionProperties) // 显示数据 df.show() // 对数据进行一些操作,例如筛选 val filteredDF = df.filter("column_name > 10") filteredDF.show() // 将处理后的数据写回MySQL filteredDF.write .mode("overwrite") .jdbc(jdbcUrl, "new_table_name", connectionProperties) // 停止SparkSession spark.stop() } } ``` ### 运行代码 在IntelliJ IDEA中,右键点击`main`方法,选择`Run 'SparkMySQLExample'`来运行代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值