使用SQL查询panda
qpd的Python项目详细描述
使用SQL查询panda-like数据帧
QPD允许您使用类似pandas的接口在不同的计算框架上运行相同的SQL(SELECT
)语句。
目前,它支持Pandas、Dask和{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 SQL和SQLite交集的子集。 正确性和一致性在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:接受不带
FROM
,SELECT 1 AS a, 'b' AS b
的常量选择 - <;=0.2.1:Pandas、Dask、Ray-SQL支持
- 项目
标签: