2025.4.8笔记

三、基于DSL的DataFrame的数据操作(DSL:Domain Spcific Language,领域特定的语言,类似RDD算子)

1、数据查询:

(1)筛选:where()/filter()

df1 = df.where('age>=10')

df2= df.where('age>=12 and score>80') df.where( 'age>=12 and score>80').show()

df.where( (df.age>12) & (df.score>80)).show() df.where(df,score>85).show( )

(2)排序:sort()/orderBy()

df.sort(df.age,df .score ,ascending=[1,0]).show() #1=True: 升序,0=False:降序 df.sort(df.age.asc(),df.score.desc()).show() #desc:降序,asc:升序

(3) 分组:groupBy()

对应的聚合函数:

count()/mean(),avg()/max(),min()/sum() df.groupBy('gender').count().show( )

df.groupBy( 'gender' ).agg({'age ' : 'mean' ,'score' : 'max'}) .show() #agg()聚合操作,aggregate

(4)查询:select/selectExpr(查询加强版)

df.select('*').show( )

df.select(df.age,df.score) .show( ) df.select('name" ,"age').show( )

df.selectExpr('name' ,'age*2 as newage') . show( )

2、数据处理:

(1)去重(行):

distinct():删除完全重复的行数据

df1.distinct().show():

dropDuplicates(['指定的字段']):删除指定的相同字段的行数据

df1.dropDuplicates(['gender ']).show()

(2)删除(行/列):

dropna():删除有缺省nu11值的行(数据清洗经常用到的方法) 

drop('指定的字段'):删除指定的字段列,影响所有记录 df1.drop('gender' ).show()

(3)限行:limit(行数)

df1.limit(2).show( )

(4)添加列:

withColumn('新字段名',upper(col('原字段'))/lit()):新增列字段(包括字段名和值) 

from pyspark.sq1.functions import col,lit,upper

df1.withColumn('add',lit('上海')).show()

(5) df1.intersectAll(df2):交集

df1.unionByName(df2):并集

四、基于SQL的DataFrame的数据操作(SQL:Structured Query Language,使用spark.sq1()方法来执行SQL相关的语句)

1、临时视图的创建与删除

(1) df1 = spark.read.csv('file:///home/spark/mydata/03/sql_website.csv',header=True,inferSchema=True)

df2 =spark.read.csv("file:///home/spark/mydata/03/sql_access_log.csv',header=True, inferSchema=True) df1.createOrReplaceTempView("website')

#a,创建局部临时视图表

df2.create0rReplaceGlobalTempView('access_log')#创建全局临时视图表

(2) spark.sql('select * from website').show()#b.访问临时表

spark.sql('select * from global_temp.access_log'). show( )

(3) spark.catalog.dropTempView('website') #c.删除临时表

spark.catalog.dropGlobalTempView(access_log)

# SQL 与 DSEL 的区别

SQL (Structured Query Language) 和 DSEL (Domain-Specific Embedded Language) 是两种不同类型的语言,主要区别如下:

## SQL (结构化查询语言)

- **用途**:专门用于管理和操作关系型数据库

- **类型**:声明式语言(告诉系统"做什么"而不是"如何做")

- **标准化**:有ANSI/ISO标准,尽管各数据库实现有差异

- **功能**:

  - 数据查询(SELECT)

  - 数据操作(INSERT, UPDATE, DELETE)

  - 数据定义(CREATE, ALTER, DROP)

  - 数据控制(GRANT, REVOKE)

## DSEL (领域特定嵌入式语言)

- **用途**:针对特定领域设计的嵌入式语言

- **类型**:通常是宿主语言的一部分(如Haskell、Scala中的嵌入式DSL)

- **特点**:

  - 专注于解决特定领域问题

  - 语法和语义针对特定领域优化

  - 通常嵌入在通用编程语言中使用

  - 没有统一标准,每种实现各不相同

## 主要区别

1. **通用性**:SQL是专门用于数据库的,而DSEL可以针对任何领域

2. **实现方式**:SQL是独立语言,DSEL通常是嵌入在宿主语言中的

3. **执行环境**:SQL在数据库引擎中执行,DSEL在宿主语言环境中执行

4. **表达能力**:DSEL可以更贴近特定领域的问题表达

举例来说,Haskell中的Esqueleto库就是一个数据库查询的DSEL,它提供了类似SQL的功能但完全嵌入在Haskell中,具有类型安全等优势。

# JSON 文件

JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写,也易于机器解析和生成。

## JSON 文件的基本结构

JSON 文件由两种基本结构组成:

1. **键值对集合**(对象):用花括号 `{}` 包围

2. **值的有序列表**(数组):用方括号 `[]` 包围

### 示例

```json

{ "name": "John Doe",

  "age": 30,

  "isStudent": false,

  "address":

{  "street": "123 Main St",

    "city": "New York"},

  "hobbies": ["reading", "hiking", "coding"],

  "contacts":

[ {"type": "email",

   "value": "john@example.com"},

    { "type": "phone",

      "value": "+1234567890" }]}```

## JSON 数据类型

JSON 支持以下数据类型:

- 字符串(必须用双引号)

- 数字(整数或浮点数)

- 布尔值(true/false)

- 数组

- 对象

- null

## JSON 文件的特点

1. **轻量级**:比XML更简洁

2. **可读性好**:结构清晰,易于理解

3. **语言无关**:几乎所有编程语言都支持

4. **自描述性**:数据本身包含结构信息

## JSON 文件的使用场景

- 配置文件(如package.json)

- API数据交换格式

- 存储简单数据结构

- 前后端通信

- NoSQL数据库(如MongoDB)的数据格式

## JSON 与 XML 比较

| 特性 | JSON | XML |

|----------------|----------------|----------------------------|

| 语法         | 更简洁     | 更冗长                  |

| 解析难度 | 更易解析 | 需要复杂解析器  |

| 数据类型 | 基本类型 | 需要定义schema|

| 可读性     | 较好         | 较差                      |

| 命名空间 | 不支持     | 支持                      |

## JSON 工具

- 验证工具:JSONLint

- 格式化工具:大多数代码编辑器都支持

- 在线查看器:JSON Viewer等

JSON 因其简单性和灵活性,已成为现代Web开发中最常用的数据格式之一。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值