Spark SQL 及其 DataFrame 的基本操作
Q & A
1. Spark SQL 出现的原因是什么?
关系数据库已经流行多年,能较好的满足各类商业公司的业务数据管理需求,但关系数据库在大数据时代已经不能满足各种新增的用户需求。用户需要从不同数据源执行各种操作(包括结构化和非结构化数据),也需要执行高级分析(在实际大数据应用中,经常需要融合关系查询和复杂分析算法)。
Spark SQL 的出现,填补了这个鸿沟。首先,Spark SQL 可以对内部和外部各种数据源执行各种关系操作;其次,可以支持大量的数据源和数据分析算法,有效地满足各种复杂的应用需求。
2. 用 spark.read 创建 DataFrame
- 从文件创建 spark.read
- 从RDD创建
3. 观察从不同类型文件创建 DataFrame 有什么异同?
- 共同点:在创建 Data Frame 时,都可以使用spark.read 操作,实现从不同类型的文件中加载数据创建DataFrame。
- 不同点:
- spark.read.text("people.txt"):读取文本文件 people.txt
- spark.read.json("people.json"):读取 JSON 文件
- spark.read.parquet("people.parquet"):读取 Parquet 文件
4. 观察 Spark 的 DataFrame 与 Python pandas 的 DataFrame 有什么异同?
Pandas 中 DataFrame 是可变的,而 Spark 中 RDDs 是不可变的,因此 DataFrame 也是不可变的。
Spark SQL DataFrame 的基本操作
1. 创建:
spark.read.text()
file = ‘file:///usr/local/spark/examples/src/main/resources/people.txt‘
df = spark.read.text(file)
spark.read.json()
file = ‘file:///usr/local/spark/examples/src/main/resources/people.json‘
df = spark.read.json(file)
2. 打印数据
df.show() 默认打印前20条数据,df.show(n)
text:
json:
3. 打印概要
df.printSchema()
text:
json:
4. 查询总行数
df.count()
df.head(3) #list 类型,list 中每个元素是 Row 类
text:
json:
5. 输出全部行
df.collect() # list 类型,list 中每个元素是Row类
text:
json:
6. 查询概况
df.describe().show()
text:
json:
7. 取列
df[‘name‘]
df.name
df.select()
df.select(df[‘name‘]).show()
df.filter()
df.filter(df.age>20).show()
df.groupBy()
df.groupBy(‘age‘).count().show()
df.sort()
df.sort(df[‘age‘]).show()