您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# 如何进行Spark SQL编程动手实战
## 一、Spark SQL简介
Spark SQL是Apache Spark的核心模块之一,专门用于结构化数据处理。它提供了:
- DataFrame/Dataset API
- 兼容HiveQL的SQL查询
- 与Spark生态无缝集成
- 支持多种数据源(JSON/Parquet/JDBC等)
## 二、环境准备
### 1. 基础环境
```bash
# 安装Spark(以Spark 3.3为例)
wget https://archive.apache.org/dist/spark/spark-3.3.0/spark-3.3.0-bin-hadoop3.tgz
tar -xzf spark-3.3.0-bin-hadoop3.tgz
./bin/spark-shell --master local[2]
// 从JSON文件创建
val df = spark.read.json("examples/src/main/resources/people.json")
// 从RDD转换
import spark.implicits._
val rdd = sc.parallelize(Seq((1,"Alice"), (2,"Bob")))
val df2 = rdd.toDF("id", "name")
// 显示数据
df.show()
// 打印Schema
df.printSchema()
// 条件查询
df.filter($"age" > 21).show()
// 分组聚合
df.groupBy("age").count().show()
// 注册临时视图
df.createOrReplaceTempView("people")
// 执行SQL查询
val result = spark.sql("SELECT name FROM people WHERE age > 20")
// 读写Parquet
df.write.parquet("output.parquet")
val parquetDF = spark.read.parquet("output.parquet")
// JDBC连接
val jdbcDF = spark.read
.format("jdbc")
.option("url", "jdbc:mysql://localhost:3306/db")
.option("dbtable", "table")
.load()
// 缓存数据
df.cache()
// 分区控制
df.repartition(4)
// 广播变量
import org.apache.spark.sql.functions.broadcast
broadcast(df).join(df2, "id")
case class Order(orderId: Int, userId: Int, amount: Double)
val orders = Seq(
Order(1, 101, 100.0),
Order(2, 102, 200.0)
).toDF()
// 用户订单分析
orders.createOrReplaceTempView("orders")
spark.sql("""
SELECT userId, SUM(amount) as total
FROM orders
GROUP BY userId
""").show()
explain()
查看执行计划spark.sql.shuffle.partitions
提示:实际开发中建议使用SparkSession替代旧的SQLContext/HiveContext “`
(全文约750字,实际使用时可根据需要调整代码示例和详细说明)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。