Spark修炼之道(进阶篇)——Spark入门到精通:第十节 Spark SQL案例实战(一)

简介: 作者:周志湖放假了,终于能抽出时间更新博客了…….1. 获取数据本文通过将github上的Spark项目git日志作为数据,对SparkSQL的内容进行详细介绍 数据获取命令如下:[root@master spark]# git log --pretty=format:'{"commit":"%H","author":"%an","author_e

作者:周志湖

放假了,终于能抽出时间更新博客了…….

1. 获取数据

本文通过将github上的Spark项目git日志作为数据,对SparkSQL的内容进行详细介绍
数据获取命令如下:

[root@master spark]# git log  --pretty=format:'{"commit":"%H","author":"%an","author_email":"%ae","date":"%ad","message":"%f"}' > sparktest.json

格式化日志内容输出如下:

[root@master spark]# head -1 sparktest.json
{"commit":"30b706b7b36482921ec04145a0121ca147984fa8","author":"Josh Rosen","author_email":"joshrosen@databricks.com","date":"Fri Nov 6 18:17:34 2015 -0800","message":"SPARK-11389-CORE-Add-support-for-off-heap-memory-to-MemoryManager"}

然后使用命令将sparktest.json文件上传到HDFS上


[root@master spark]#hadoop dfs -put sparktest.json /data/

2. 创建DataFrame

使用数据创建DataFrame

scala> val df = sqlContext.read.json("/data/sparktest.json")
16/02/05 09:59:56 INFO json.JSONRelation: Listing hdfs://ns1/data/sparktest.json on driver

查看其模式:

scala> df.printSchema()
root
 |-- author: string (nullable = true)
 |-- author_email: string (nullable = true)
 |-- commit: string (nullable = true)
 |-- date: string (nullable = true)
 |-- message: string (nullable = true)

3. DataFrame方法实战

(1)显式前两行数据

scala> df.show(2)

+----------------+--------------------+--------------------+--------------------+--------------------+
|          author|        author_email|              commit|                date|             message|
+----------------+--------------------+--------------------+--------------------+--------------------+
|      Josh Rosen|joshrosen@databri...|30b706b7b36482921...|Fri Nov 6 18:17:3...|SPARK-11389-CORE-...|
|Michael Armbrust|michael@databrick...|105732dcc6b651b97...|Fri Nov 6 17:22:3...|HOTFIX-Fix-python...|
+----------------+--------------------+--------------------+--------------------+--------------------+

(2)计算总提交次数


scala> df.count
res4: Long = 13507
下图给出的是我github上的commits次数,可以看到,其结束是一致的

这里写图片描述

(3)按提交次数进行降序排序

scala>df.groupBy("author").count.sort($"count".desc).show

+--------------------+-----+
|              author|count|
+--------------------+-----+
|       Matei Zaharia| 1590|
|         Reynold Xin| 1071|
|     Patrick Wendell|  857|
|       Tathagata Das|  416|
|          Josh Rosen|  348|
|  Mosharaf Chowdhury|  290|
|           Andrew Or|  287|
|       Xiangrui Meng|  285|
|          Davies Liu|  281|
|          Ankur Dave|  265|
|          Cheng Lian|  251|
|    Michael Armbrust|  243|
|             zsxwing|  200|
|           Sean Owen|  197|
|     Prashant Sharma|  186|
|  Joseph E. Gonzalez|  185|
|            Yin Huai|  177|
|Shivaram Venkatar...|  173|
|      Aaron Davidson|  164|
|      Marcelo Vanzin|  142|
+--------------------+-----+
only showing top 20 rows

4. DataFrame注册成临时表使用实战

使用下列语句将DataFrame注册成表

scala> val commitLog=df.registerTempTable("commitlog")

(1)显示前2行数据

scala> sqlContext.sql("SELECT * FROM commitlog").show(2)
+----------------+--------------------+--------------------+--------------------+--------------------+
|          author|        author_email|              commit|                date|             message|
+----------------+--------------------+--------------------+--------------------+--------------------+
|      Josh Rosen|joshrosen@databri...|30b706b7b36482921...|Fri Nov 6 18:17:3...|SPARK-11389-CORE-...|
|Michael Armbrust|michael@databrick...|105732dcc6b651b97...|Fri Nov 6 17:22:3...|HOTFIX-Fix-python...|
+----------------+--------------------+--------------------+--------------------+--------------------+

(2)计算总提交次数

scala> sqlContext.sql("SELECT count(*) as TotalCommitNumber  FROM commitlog").show
+-----------------+
|TotalCommitNumber|
+-----------------+
|            13507|
+-----------------+

(3)按提交次数进行降序排序

scala> sqlContext.sql("SELECT author,count(*) as CountNumber  FROM commitlog GROUP BY author ORDER BY CountNumber DESC").show

+--------------------+-----------+
|              author|CountNumber|
+--------------------+-----------+
|       Matei Zaharia|       1590|
|         Reynold Xin|       1071|
|     Patrick Wendell|        857|
|       Tathagata Das|        416|
|          Josh Rosen|        348|
|  Mosharaf Chowdhury|        290|
|           Andrew Or|        287|
|       Xiangrui Meng|        285|
|          Davies Liu|        281|
|          Ankur Dave|        265|
|          Cheng Lian|        251|
|    Michael Armbrust|        243|
|             zsxwing|        200|
|           Sean Owen|        197|
|     Prashant Sharma|        186|
|  Joseph E. Gonzalez|        185|
|            Yin Huai|        177|
|Shivaram Venkatar...|        173|
|      Aaron Davidson|        164|
|      Marcelo Vanzin|        142|
+--------------------+-----------+

更多复杂的玩法,大家可以自己去尝试,这里给出的只是DataFrame方法与临时表SQL语句的用法差异,以便于有整体的认知。

目录
相关文章
|
1月前
|
分布式计算 大数据 Apache
ClickHouse与大数据生态集成:Spark & Flink 实战
【10月更文挑战第26天】在当今这个数据爆炸的时代,能够高效地处理和分析海量数据成为了企业和组织提升竞争力的关键。作为一款高性能的列式数据库系统,ClickHouse 在大数据分析领域展现出了卓越的能力。然而,为了充分利用ClickHouse的优势,将其与现有的大数据处理框架(如Apache Spark和Apache Flink)进行集成变得尤为重要。本文将从我个人的角度出发,探讨如何通过这些技术的结合,实现对大规模数据的实时处理和分析。
143 2
ClickHouse与大数据生态集成:Spark & Flink 实战
|
1月前
|
SQL 数据库 UED
SQL性能提升秘籍:5步优化法与10个实战案例
在数据库管理和应用开发中,SQL查询的性能优化至关重要。高效的SQL查询不仅可以提高应用的响应速度,还能降低服务器负载,提升用户体验。本文将分享SQL优化的五大步骤和十个实战案例,帮助构建高效、稳定的数据库应用。
65 3
|
1月前
|
SQL 缓存 监控
SQL性能提升指南:五大优化策略与十个实战案例
在数据库性能优化的世界里,SQL优化是提升查询效率的关键。一个高效的SQL查询可以显著减少数据库的负载,提高应用响应速度,甚至影响整个系统的稳定性和扩展性。本文将介绍SQL优化的五大步骤,并结合十个实战案例,为你提供一份详尽的性能提升指南。
52 0
|
1月前
|
SQL JSON 分布式计算
【赵渝强老师】Spark SQL的数据模型:DataFrame
本文介绍了在Spark SQL中创建DataFrame的三种方法。首先,通过定义case class来创建表结构,然后将CSV文件读入RDD并关联Schema生成DataFrame。其次,使用StructType定义表结构,同样将CSV文件读入RDD并转换为Row对象后创建DataFrame。最后,直接加载带有格式的数据文件(如JSON),通过读取文件内容直接创建DataFrame。每种方法都包含详细的代码示例和解释。
|
2月前
|
SQL 数据库
SQL数据库基础语法入门
[link](http://www.vvo.net.cn/post/082935.html)
|
2月前
|
SQL 分布式计算 大数据
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(一)
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(一)
77 0
|
2月前
|
SQL 分布式计算 算法
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(二)
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(二)
95 0
|
2月前
|
SQL 分布式计算 Java
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
68 0
|
分布式计算 算法 大数据
大数据实战之spark安装部署
楔子 我是在2013年底第一次听说Spark,当时我对Scala很感兴趣,而Spark就是使用Scala编写的。一段时间之后,我做了一个有趣的数据科学项目,它试着去预测在泰坦尼克号上幸存。
3091 0
|
2月前
|
存储 分布式计算 算法
大数据-106 Spark Graph X 计算学习 案例:1图的基本计算、2连通图算法、3寻找相同的用户
大数据-106 Spark Graph X 计算学习 案例:1图的基本计算、2连通图算法、3寻找相同的用户
73 0