SQL,熊猫和火花常用数据查询操作对比

本篇内容介绍了“SQL、Pandas和Spark常用数据查询操作对比”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

01 SQL标准查询

谈到数据,必会提及数据库;而提及数据库,则一般指代关系型数据库(RMDB),操作关系型数据库的语言则是SQL(Structured  Query  Language)。SQL本质上仍然属于一种编程语言,并且有着相当悠久的历史,不过其语法特性却几乎没怎么变更过,从某种意义上讲这也体现了SQL语言的过人之处。

SQL、Pandas和Spark常用数据查询操作对比

在最新TIOBE排行榜中,SQL位居第10位

一般而言,一句标准的SQL语句按照书写顺序通常含有如下关键词:

  • select:指定查询字段

  • distinct:对查询结果字段进行去重

  • from:明确查询的数据库和表

  • join>

  • from:首先找到待查询的表

  • join>

  • 通过loc定位操作符+逻辑判断条件实现筛选过滤。loc是用于数据读取的方法,由于其也支持传入逻辑判断条件,所以自然也可用于实现数据过滤,这也是日常使用中最为频繁一种;

  • 通过query接口实现,提起query,首先可能想到的便是SQL中Q,实际上pandas中的query实现的正是对标SQL中的where语法,在实现链式筛选查询中非常好用,具体可参考Pandas用了一年,这3个函数是我的最爱……

  • where语句,Pandas以API丰富而著称,所以自然是不会放过where关键字的,不过遗憾的是Pandas中的where和Numpy中的where一样,都是用于对所有列的所有元素执行相同的逻辑判断,可定制性较差。

Spark。Spark中实现数据过滤的接口更为单一,有where和filter两个关键字,且二者的底层实现是一致的,所以实际上就只有一种用法。但在具体使用中,where也支持两种语法形式,一种是以字符串形式传入一个类SQL的条件表达式,类似于Pandas中query;另一种是显示的以各列对象执行逻辑判断,得到一组布尔结果,类似于Pandas中loc操作。

4)group by。group  by关键字用于分组聚合,实际上包括了分组和聚合两个阶段,由于这一操作属于比较规范化的操作,所以Pandas和Spark中也都提供了同名关键字,不同的是group  by之后所接的操作算子不尽相同。

Pandas:Pandas中groupby操作,后面可接多个关键字,常用的其实包括如下4类:

  • 直接接聚合函数,如sum、mean等;

  • 接agg函数,并传入多个聚合函数;

  • 接transform,并传入聚合函数,但不聚合结果,即聚合前有N条记录,聚合后仍然有N条记录,类似SQL中窗口函数功能,具体参考Pandas中groupby的这些用法你都知道吗?

  • 接apply,实现更为定制化的函数功能,参考Pandas中的这3个函数,没想到竟成了我数据处理的主力

Spark:Spark中的groupBy操作,常用的包括如下3类:

  • 直接接聚合函数,如sum、avg等;

  • 接agg函数,并传入多个聚合算子,与Pandas中类似;

  • 接pivot函数,实现特定的数据透视表功能。

5)having。在SQL中,having用于实现对聚合统计后的结果进行过滤筛选,与where的核心区别在于过滤所用的条件是聚合前字段还是聚合后字段。而这在Pandas和Spark中并不存在这一区别,所以与where实现一致。

6)select。选择特定查询结果,详见Pandas vs Spark:获取指定列的N种方式。

7)distinct。distinct在SQL中用于对查询结果去重,在Pandas和Spark中,实现这一操作的函数均为drop_duplicates/dropDuplicates。

8)order by。order by用于根据指定字段排序,在Pandas和Spark中的实现分别如下:

Pandas:sort_index和sort_values,其中前者根据索引排序,后者根据传入的列名字段排序,可通过传入ascending参数控制是升序还是降序。

Spark:orderBy和sort,二者也是相同的底层实现,功能完全一致。也是通过传入的字段进行排序,可分别配合asc和desc两个函数实现升序和降序。

// 1、指定列+desc df.orderBy(df("col").desc) // 2、desc函数加指定列 df.orderBy(desc("col"))

9)limit。limit关键字用于限制返回结果条数,这是一个功能相对单一的操作,二者的实现分别如下:

SQL,熊猫和火花常用数据查询操作对比