PyODPS DataFrame:统一的数据查询语言

前几天,PyODPS发布了0.7版本,这篇文章给大家介绍下PyODPS新版本带来的重要特性。

之前也有若干篇文章介绍过了,我们PyODPS DataFrame是延迟执行的,在调用立即执行的方法,比如execute、persist等之前,都只是构建了表达式。而真正的执行根据具体的输入数据,来决定执行的后端。

比如,我们可以根据输入是pandas DataFrame(本地数据),还是MaxCompute Table(MaxCompute数据)来决定是在本地执行,还是在MaxComput上执行。

In [1]: import pandas as pd

In [2]: pd_df = pd.DataFrame({'a': range(3)})

In [3]: from odps.df import DataFrame

In [4]: df = DataFrame(pd_df)  # 本地数据

In [5]: df.a.sum()
|==========================================|   1 /  1  (100.00%)         0s
3

In [6]: %load_ext odps

In [7]: %enter
Out[7]: <odps.inter.Room at 0x105951990>

In [8]: df = DataFrame(o.get_table('pyodps_iris'))  # MaxCompute数据

In [9]: df.sepal_width.sum()
|==========================================|   1 /  1  (100.00%)        15s
458.10000000000014

数据库执行

来到了0.7版本,我们的后端武器库进一步扩充,现在我们支持Postgresql和MySQL,原则上我们支持所有的主流数据库,但我们只在这两个数据库上做了测试。

我们的数据库执行后端使用 sqlalchemy 实现,想要执行还需要对应数据库的driver。

现在,如果DataFrame输入的数据是sqlalchemy Table,那么我们就可以使用数据库后端来执行。

In [24]: mysql_engine = sqlalchemy.create_engine('mysql://root:123@localhost/movielens') 

In [25]: metadata = sqlalchemy.MetaData(bind=mysql_engine)   # 需要绑定engine

In [26]: table = sqlalchemy.Table('top_users', metadata, extend_existing=True, autoload=True)

In [27]: top_users = DataFrame(table)

In [28]: top_users.age.sum()
|==========================================|   1 /  1  (100.00%)         0s
763

对于postgresql也是一样。 值得注意的是,现在还有部分DataFrame操作,比如自定义函数尚未支持数据库后端

可以看到,PyODPS DataFrame就是一个统一的数据查询语言,用户不需要改写一行代码,就可以根据输入让数据在MaxCompute、本地和数据库上执行,由于DataFrame框架的灵活性,我们甚至还可以扩展出非SQL执行后端的支持。

JOIN或者UNION数据库和MaxCompute数据

过去 一篇文章 提到过,我们可以join或者union本地和MaxCompute上的数据,这样的典型场景就是,比如我有个本地excel文件,我可以轻松读取成本地DataFrame,然后直接就可以和MaxCompute数据进行操作,省去了一大堆麻烦的过程。

现在,我们也同样可以join 数据库和MaxCompute上的数据,试想,有一堆用户数据是在数据库中进行处理,然后我们无需经过同步数据等繁琐的过程,我们就可以直接join 数据库和MaxCompute上的数据,这是何其方便的事情。

比如:

In [29]: ratings = o.get_table('movielens_ratings').to_df()

In [32]: female_top_users = top_users[top_users.sex == 'F']  # MySQL中的数据

In [33]: ratings.join(female_top_users).rating.mean()
|==========================================|   1 /  1  (100.00%)        14s
2.9451170298627924

有了数据库执行后端,才有了我们接下来的一个重要feature。

总结

我们PyODPS一直处在快速迭代的过程中,我们所有所做的努力,都是为了让大家以更好的体验来进行数据分析和机器学习。尽管我们很努力,但精力毕竟有限,难免会有bug,会有功能不完善。希望大家能给我们提issue,能贡献代码就更好啦。

项目文档:http://pyodps.readthedocs.io
项目地址:https://github.com/aliyun/aliyun-odps-python-sdk
提issue:https://github.com/aliyun/aliyun-odps-python-sdk/issues
钉钉扫码:

时间: 2024-09-20 13:20:29

PyODPS DataFrame:统一的数据查询语言的相关文章

PyOdps DataFrame来临,数据分析从未如此简单!

PyOdps正式发布DataFrame框架(此处应掌声经久不息),DTer的福音!有了它,就像卷福有了花生,比翼双飞,哦不,如虎添翼. 快过年了,大家一定没心情看长篇大论的分析文章.作为介绍PyOdps DataFrame的开篇文章,我只说说其用起来爽的地方.其余的部分,从使用.问题到实现原理,我会分文章细说. 如果不知道是DataFrame什么,它是存在于pandas和R里的数据结构,你可以把它当做是表结构.如果想快速浏览PyOdps DataFrame能做什么,可以看我们的快速开始文档. 让

什么是PyODPS DataFrame

最近已经写了几篇有关PyODPS DataFrame的文章,但是还是有些同学不明白PyODPS DataFrame是什么,以及能做什么事情.这篇文章,我会做出解释,以及简单介绍一下实现的原理. PyODPS DataFrame 首先什么是DataFrame,我在以前的文章也解释过,我们可以把它认为是二维表结构.在单机上,数据科学家一般会使用R或者Python库pandas来做数据分析,DataFrame是它们上广泛使用的数据结构.在DataFrame上,我们可以做过滤.列筛选.join.unio

利用Dojo Data开发统一的数据访问模型

目前,企业内部的数据量正快速膨胀,客户端和服务器端之间交换的数据格式也是多种多样.由于 Web2.0.RIA 的快速发展,在客户端处理数据逐渐成为一种趋势,但是基于 XMLHTTPRequest 的一般 Ajax 客户端程序必须由 Web 开发人员自己编写处理各种数据格式的代码.这样,不仅加重了客户端逻辑的复杂性,而且降低了程序的可维护性和可扩展性.而 Dojo Data 库旨在为不同的数据格式提供一种统一的数据访问模型,使得数据的读写都采用统一的接口,从而有利于程序的移植和维护.通过阅读本文读

Flink运行时之统一的数据交换对象

统一的数据交换对象 在Flink的执行引擎中,流动的元素主要有两种:缓冲(Buffer)和事件(Event).Buffer主要针对用户数据交换,而Event则用于一些特殊的控制标识.但在实现时,为了在通信层统一数据交换,Flink提供了数据交换对象--BufferOrEvent.它是一个既可以表示Buffer又可以表示Event的类.上层使用者只需调用isBuffer和isEvent方法即可判断当前收到的这条数据是Buffer还是Event. 缓冲 缓冲(Buffer)是数据交换的载体,几乎所有

成都规划建设统一大数据中心 非涉密政务信息上“云”

成都是最大的公共数据拥有者,成都将推动所有非涉密信息系统全部迁移上"云",实现跨部门.跨区域.跨层级业务系统互联互通和政务数据资源共享开放.9月4日,成都市政府常务会议审议通过<成都市政务云建设规划(2017-2020年)>,明确了构建"云.网.端.数"四位一体的政务云平台目标. 据了解,政务云已成为国家实施网络强国战略.大数据战略."互联网+"行动计划的重要支撑,省委.省政府也将政务云作为统筹电子政务发展.破解"群众办事难

成都建统一大数据中心非涉密政务信息全部上“云”

9月4日,成都市政府常务会议审议通过<成都市政务云建设规划(2017-2020年)>,明确了构建"云.网.端.数"四位一体的政务云平台目标. 成都是最大的公共数据拥有者,成都将推动所有非涉密信息系统全部迁移上"云",实现跨部门.跨区域.跨层级业务系统互联互通和政务数据资源共享开放.9月4日,成都市政府常务会议审议通过<成都市政务云建设规划(2017-2020年)>,明确了构建"云.网.端.数"四位一体的政务云平台目标. 据

通信行业用统一大数据平台破解“多租户”

源于互联网的大数据技术,现如今已经深入到传统行业之中.各行各业大都在积极使用大数据推动数字化转型,基于每个行业的特点和信息化水平的不同,在大数据的应用上也各不相同,其中金融.电信.政府.交通行业领跑大数据应用. 某电信运营商的大数据应用在运营商中属于第一梯队,早在3.4年前就开始了大数据平台的建设.但随着业务带动数据量的增长,也产生了多租户的问题,所以在大数据平台二期建设上,其考虑通过统一架构来解决多租户问题. 运营商的多租户挑战 在大数据应用上可以分为三个阶段,第一,实验期,非核心业务的应用:

MetaModel:跨多种数据存储提供统一的数据访问

最近,Human Inference和Apache软件基金会(ASF)分别宣布了捐赠与接受MetaModel项目的消息, 今后MetaModel将成为一个Apache孵化器项目.此前,MetaModel遵循LGPL许可证,由Human Inference的 产品开发团队管理,但现在已经转移到了ASF上,将遵循新的许可证.拥有新的社区.接受新的管理.那 么这个项目到底是什么呢?它又有哪些用途? MetaModel是一个Java类库,设计它的目的是提供 一个可以与任何数据存储(不论是关系型数据库.N

阿里巴巴大数据计算平台MaxCompute(原名ODPS)全套攻略(持续更新20171122)

  概况介绍 大数据计算服务(MaxCompute,原名ODPS,产品地址:https://www.aliyun.com/product/odps)是一种快速.完全托管的TB/PB级数据仓库解决方案.MaxCompute向用户提供了完善的数据导入方案以及多种经典的分布式计算模型,能够更快速的解决用户海量数据计算问题,有效降低企业成本,并保障数据安全.本文收录了大量的MaxCompute产品介绍.技术介绍,帮助您快速了解MaxCompute/ODPS. MaxCompute 2.0:阿里巴巴的大数