Spark SQL 和 DataFrames学习

本文介绍了SparkSQL模块及其核心编程抽象DataFrame,展示了如何通过DataFrame API处理结构化数据,包括读取JSON文件、执行选择、过滤、分组等操作,同时演示了如何使用SQL语句进行相同的数据处理。

Spark SQL 和 DataFrames

Spark SQL 是 Spark 内嵌的模块,用于结构化数据。在 Spark 程序中可以使用 SQL 查询语句或 DataFrame API。DataFrames 和 SQL 提供了通用的方式来连接多种数据源,支持 Hive、Avro、Parquet、ORC、JSON、和 JDBC,并且可以在多种数据源之间执行 join 操作。

spark SQL是spark的一个模块,主要用于进行结构化数据的处理。它提供的最核心的编程抽象就是DataFrame。
DataFrame:它可以根据很多源进行构建,包括:结构化的数据文件,hive中的表,外部的关系型数据库,以及RDD

创建DataFrame

数据文件students.json

{"name":"Michael"}
{"name":"Andy", "age":30}
{"name":"Justin", "age":19}
val df = sqlContext.read.json("file:///usr/local/spark/examples/src/main/resources/people.json")
// df: org.apache.spark.sql.DataFrame = [age: bigint, name: string]
 
df.show()     // 输出数据源内容
// +----+-------+
// | age|   name|
// +----+-------+
// |null|Michael|
// |  30|   Andy|
// |  19| Justin|
// +----+-------+

接着,我们来演示 DataFrames 处理结构化数据的一些基本操作:

df.select("name").show()    // 只显示 "name" 列
// +-------+
// |   name|
// +-------+
// |Michael|
// |   Andy|
// | Justin|
// +-------+
 
df.select(df("name"), df("age") + 1).show()   // 将 "age" 加 1
// +-------+---------+
// |   name|(age + 1)|
// +-------+---------+
// |Michael|     null|
// |   Andy|       31|
// | Justin|       20|
// +-------+---------+
 
df.filter(df("age") > 21).show()     # 条件语句
// +---+----+
// |age|name|
// +---+----+
// | 30|Andy|
// +---+----+
 
df.groupBy("age").count().show()   // groupBy 操作
// +----+-----+
// | age|count|
// +----+-----+
// |null|    1|
// |  19|    1|
// |  30|    1|
// +----+-----+
当然,我们也可以使用 SQL 语句来进行操作:
//导入SQLContext
scala> import org.apache.spark.sql.SQLContext
import org.apache.spark.sql.SQLContext
//声明一个SQLContext的对象,以便对数据进行操作
scala> val sql = new SQLContext(sc)
warning: there was one deprecation warning; re-run with -deprecation for details
sql: org.apache.spark.sql.SQLContext = org.apache.spark.sql.SQLContext@27acd9a7
//读取数据
scala> val students = sql.read.json("file:///home/cxx/bigdata/people.json")
students: org.apache.spark.sql.DataFrame = [age: bigint, id: bigint ... 1 more field]
//显示数据
students.registerTempTable("people")     // 将 DataFrame 注册为临时表 people
val result = sqlContext.sql("SELECT name, age FROM people WHERE age >= 13 AND age <= 19")  // 执行 SQL 查询
result.show()        // 输出结果
// +------+---+
// |  name|age|
// +------+---+
// |Justin| 19|
// +------+---+

DataFrame常用操作

scala> students.show
scala> students.printSchema
scala> students.select("name").show
scala> students.select(students("name"),students("age")+1).show
scala> students.filter(students("age")>18).show
scala> students.groupBy("age").count().show


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值