SparkSQL-基本使用

案例导入

有一个名为 ecommerce_data.csv 的 CSV 文件,包含以下列:order_id(订单编号)、product_id(商品编号)、product_name(商品名称)、quantity(购买数量)、price(商品单价)、user_id(用户编号)、order_date(订单日期)。

目标要求是:筛选出购买数量大于 5 的订单信息。

order_id,product_id,product_name,quantity,price,user_id,order_date

1,101,iPhone 15,2,999.99,1001,2024-01-01

2,102,Samsung Galaxy S24,3,899.99,1002,2024-01-02

3,103,MacBook Pro,1,2499.99,1003,2024-01-03

4,104,PlayStation 5,2,499.99,1004,2024-01-04

5,105,Xbox Series X,1,499.99,1005,2024-01-05

6,101,iPhone 15,1,999.99,1006,2024-01-06

7,102,Samsung Galaxy S24,2,899.99,1007,2024-01-07

8,103,MacBook Pro,8,2499.99,1008,2024-01-08

9,104,PlayStation 5,1,499.99,1009,2024-01-09

10,105,Xbox Series X,12,499.99,1010,2024-01-10

思路分析

这是一个非常标准的二维表,我们能不能像处理数据库的数据表一样,使用SQL语句呢?

【如何这是一个二维表,如何写sql语句来做查询】

答:可以。可以读入文件,然后使用类似于sql中的seletc * from where quantity > 5 这样的语句。

DataFrame的概念

DataFrame 是一种分布式数据集,类似于传统数据库中的二维表格,具有行和列的结构。它是 RDD 的一种高级抽象,提供了更丰富的操作接口和优化的执行引擎。

DataFrame 可以从多种数据源创建,如文件(CSV、JSON等)、数据库等。

使用DataFrame处理结构化数据有两种方式: 1.是DSL编程; 2. SQL 语句

(四)SQL风格操作DataFrame

使用sql风格操作的前提是将DataFrame注册成一个临时表,在程序中直接使用spark.sql()方式执行SQL查询,结果将作为一个DataFrame返回。

val spark = SparkSession.builder()
.appName("SparkSQL01")

.master("local[*]")

      .getOrCreate()
// 读取 CSV 文件并创建 DataFrame
val df= spark.read
    .option("header", "true")

  .option("inferSchema", "true")

  .csv("ecommerce_data.csv")

df.registerTempTable("t_per")

spark.sql("select * from t_per where quantity > 5").show()

需要提前导入相关的包。

<dependency>

     <groupId>org.scala-lang</groupId>

     <artifactId>scala-library</artifactId>

     <version>2.12.15</version>

 </dependency>

 <dependency>

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

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

      <version>3.3.1</version>

 </dependency>
DSL风格操作DataFrame

前面我们使用sql语句的方式完成了数据的筛选,下面我们通过一个例子来看看DSL的使用方式。然后就调用它的相关方法:printSchema和show。

// 读取 CSV 文件并创建 DataFrame

val ecommerceDF = spark.read

  .option("header", "true")

  .option("inferSchema", "true")

  .csv("ecommerce_data.csv")



// 显示 DataFrame 的基本信息

ecommerceDF.printSchema()

// 显示 DataFrame 的前几行数据

ecommerceDF.show()  
// 筛选出购买数量大于 5 的订单

val filteredDF = ecommerceDF.filter($"quantity" > 5)

filteredDF.show()  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值