使用SQL查询panda

qpd的Python项目详细描述


使用SQL查询panda-like数据帧

QPD允许您使用类似pandas的接口在不同的计算框架上运行相同的SQL(SELECT)语句。 目前,它支持PandasDask和{a3} (通过射线上的Modin)。在

QPD直接将SQL转换成类似pandas的操作,以便在后端计算框架上运行,因此可以显著提高 比其他方法更快,例如,将pandas数据帧转储到SQLite中,运行SQL并将结果转换回 熊猫数据帧。然而,QPD的最高优先级是correctification和^{str1}$consistence。它确保了 实现了遵循SQL约定的SQL特性,并且无论后端计算框架如何,它都确保了一致的行为。 一个典型的例子是groupby().agg()。在pandas或pandas-like框架中,如果任何组键为null,则默认值为 行为是删除该组,但是在SQL中不会删除它们。QPD遵循SQL方式。在

QPD语法是Spark SQLSQLite交集的子集。 正确性和一致性在SQLite上进行了广泛的测试。实际上,sparksql和SQLite是高度一致的 在语法和行为上。因此,换句话说,QPD使您能够运行公共sql,并在Pandas、SQLite、Spark、Dask上得到相同的结果, Ray和QPD将来将支持的其他后端。在

SQL是最重要的数据处理语言之一。这是非常scale不可知论的,也是赋格项目的主要目标之一 是丰富SQL并使SQL platform不可知。QPD是Fugue的一个子项目,它专注于在类似pandas的框架上运行SQL 实现最终目标的必要组成部分。在

安装

QPD可以从PyPI安装:

pip install qpd # install qpd + pandas

如果要使用Ray或Dask作为后端,则需要使用以下目标之一安装QPD:

^{pr2}$

使用QPD

熊猫

fromqpd_pandasimportrun_sql_on_pandasimportpandasaspddf=pd.DataFrame([[0,1],[2,3],[0,5]],columns=["a","b"])res=run_sql_on_pandas("SELECT a, SUM(b) AS b, COUNT(*) AS c FROM df GROUP BY a",{"df":df})print(res)

在达斯克

请阅读this来学习最好的 初始化dask的练习。在

fromqpd_daskimportrun_sql_on_daskimportdask.dataframeaspdimportpandasdf=pd.from_pandas(pandas.DataFrame([[0,1],[2,3],[0,5]],columns=["a","b"]))res=run_sql_on_dask("SELECT a, SUM(b) AS b, COUNT(*) AS c FROM df GROUP BY a",{"df":df})print(res.compute())# dask dataframe is lazy, you need to call compute

射线

请阅读this来学习最好的 初始化光线的练习。读this 用于初始化modin+ray。在

请不要使用dask作为modin后端如果你想使用QPD,它不会被测试

importrayray.init()fromqpd_rayimportrun_sql_on_rayimportmodin.pandasaspddf=pd.DataFrame([[0,1],[2,3],[0,5]],columns=["a","b"])res=run_sql_on_ray("SELECT a, SUM(b) AS b, COUNT(*) AS c FROM df GROUP BY a",{"df":df})print(res)

忽略SQL中的大小写

默认情况下,QPD要求用户使用大写关键字,否则将引发语法错误。 但是,如果您真的不喜欢这种行为,可以关闭它,参数是ignore_case, 下面是一个例子:

fromqpd_pandasimportrun_sql_on_pandasimportpandasaspddf=pd.DataFrame([[0,1],[2,3],[0,5]],columns=["a","b"])res=run_sql_on_pandas("select a, sum(b) as b, count(*) as c from df group by a",{"df":df},ignore_case=True)print(res)

需要澄清的事情

火花上的QPD(考拉)?

不,那不会发生的。QPD正在使用Spark SQL syntax file。 Spark SQL是高度优化的。如果我们创建一个考拉后端,正确性和一致性可以 可以保证,但是没有性能优势。所以对于Spark,请使用Spark SQL。 如果在Spark后端使用fuguesql,它也将直接使用Spark来运行SQL语句。 我们看不到让QPD在Spark上运行的值。在

更新历史记录

  • 0.2.5:将antlr更新为4.9
  • 0.2.4:修复错误:set操作将更改输入数据帧以添加列
  • 0.2.3:重构并提取PandasLikeUtils类
  • 0.2.2:接受不带FROMSELECT 1 AS a, 'b' AS b的常量选择
  • <;=0.2.1:Pandas、Dask、Ray-SQL支持

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java FirebaseInstanceId。getInstance()始终为空   linux Java执行文件错误   javaspringboot:如何使用Ajax在springboot和Thymeleaf中创建进度条?   java禁用在安卓上使用传单时启用setJavaScriptEnabled   java如何在主体中发布原始类型JSON数据?   消除JAVA While循环中的额外输出   如何在java中直接将基本数据类型分配给自定义类   java为什么addNode()方法返回编译错误“类型中的方法…不适用于参数…”,我该如何修复它?   java惰性合成可观察对象   eclipse Java Blackberry位图单击   java Android:AsyncTask对象[]无法在doInBackground中强制转换   java有没有办法重构或改进这段代码?   java如何使用系统以十六进制打印字节。出来普林顿?   多线程如何在我的java聊天室中调试“java.net.UnknownHostException”?   java如何从Google App Engine下载应用程序源文件   java如何在Spring Data Mongo的聚合$group中使用类似$dateToString   java IBM websphere application server未在MyEclipse8中启动。0