针对数据生成和运行查询

datafusion的Python项目详细描述


Python中的数据融合

这是一个绑定到Apache Arrow内存查询引擎DataFusion的Python库。在

与pyspark一样,它允许您通过SQL或dataframeapi针对内存中的数据、parquet或CSV文件构建计划,在多线程环境中运行它,并在Python中获得结果。在

它还允许您将udf和UDAFs用于复杂的操作。在

与其他执行引擎相比,这个库的主要优点是它在Python和它的执行引擎之间实现了零拷贝:除了在运行这些操作时必须锁定GIL之外,使用udf、UDAFs并将结果收集到Python中没有成本。在

它的查询引擎DataFusion是用Rust编写的,它对线程安全和缺少内存泄漏做出了强有力的假设。在

从技术上讲,零拷贝是通过c data interface实现的。在

如何使用它

简单用法:

importdatafusionimportpyarrow# an aliasf=datafusion.functions# create a contextctx=datafusion.ExecutionContext()# create a RecordBatch and a new DataFrame from itbatch=pyarrow.RecordBatch.from_arrays([pyarrow.array([1,2,3]),pyarrow.array([4,5,6])],names=["a","b"],)df=ctx.create_dataframe([[batch]])# create a new statementdf=df.select(f.col("a")+f.col("b"),f.col("a")-f.col("b"),)# execute and collect the first (and only) batchresult=df.collect()[0]assertresult.column(0)==pyarrow.array([5,7,9])assertresult.column(1)==pyarrow.array([-3,-3,-3])

自定义项

^{pr2}$

UDAF

importpyarrowimportpyarrow.computeclassAccumulator:"""    Interface of a user-defined accumulation.    """def__init__(self):self._sum=pyarrow.scalar(0.0)defto_scalars(self)->[pyarrow.Scalar]:return[self._sum]defupdate(self,values:pyarrow.Array)->None:# not nice since pyarrow scalars can't be summed yet. This breaks on `None`self._sum=pyarrow.scalar(self._sum.as_py()+pyarrow.compute.sum(values).as_py())defmerge(self,states:pyarrow.Array)->None:# not nice since pyarrow scalars can't be summed yet. This breaks on `None`self._sum=pyarrow.scalar(self._sum.as_py()+pyarrow.compute.sum(states).as_py())defevaluate(self)->pyarrow.Scalar:returnself._sumdf=...udaf=f.udaf(Accumulator,pyarrow.float64(),pyarrow.float64(),[pyarrow.float64()])df=df.aggregate([],[udaf(f.col("a"))])

如何安装

pip install datafusion

如何发展

这假设您安装了铁锈和货物。我们使用pyo3maturin推荐的工作流。在

引导:

# fetch this repo
git clone git@github.com:jorgecarleitao/datafusion-python.git

cd datafusion-python

# prepare development environment (used to build wheel / install in development)
python -m venv venv
venv/bin/pip install maturin==0.8.2 toml==0.10.1

只要rust代码更改(您的更改或通过git pull):

venv/bin/maturin develop
venv/bin/python -m unittest discover tests

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

推荐PyPI第三方库


热门话题
javaelk:如何在Kibana中按异常类对stacktrace进行分组   java两个组件使用MigLayout相互重叠   java Hibernate标准获取关联实体的列表,而不是父实体的列表   从Java关闭另一个应用程序,但不是由当前Java应用程序启动   java使用OGNL获取参数   java如何在SSLEngine中启用密码TLS\U DHE\U RSA\U和\U AES\U 256\U GCM\U SHA384   在Java中有效地比较两个列表<Object[]>   java杀死挂起的线程   在java中从指定模式前后的字符串中提取子字符串   存储整数的java HashMap替代方案   java如何使用LibGDX加载特定于语言的资产?   java如何使用JSON响应从维基百科读取结构化数据   java无法连接到Spark Master:原因是:[已解除关联]   java如何配置Elastic beanstalk classic负载平衡器以使用CLI终止HTTPS   java筛网中的奥斯汀大于int   java PircBot在每个用户上迭代一组命令   java将带有Jackson的hashmap编组为XML的错误结构   testng中的java设置testfailure给出了正回报   java如何在IntelliJ中正确配置Eclipse项目?