跳转到主要内容

将大型数据框连接在一起

项目描述

在大型类似文件的数据框上执行类似SQL的JOIN操作

  • 您的文件系统中是否堆放着大量超出内存的dataset数据集?

  • 您是否梦想着一种简单地将它们连接在一起的方法?

  • 您想在不需要使用数据库的情况下实现这一点吗?

如果上述问题的答案是“是”,那么datawelder就是为您准备的!

示例

首先,检查我们的玩具数据集。它包含两个独立表中的国家名称和货币。

$ head -n 5 sampledata/names.csv
iso3,name
AND,Principality of Andorra
ARE,United Arab Emirates
AFG,Islamic Republic of Afghanistan
ATG,Antigua and Barbuda
$ head -n 5 sampledata/currencies.csv
iso3,currency
AND,Euro
ARE,Dirham
AFG,Afghani
ATG,Dollar

我们可以像下面这样将这两个数据框连接起来

$ python -m datawelder.partition sampledata/names.csv partitions/names 5
$ python -m datawelder.partition sampledata/currencies.csv partitions/currencies 5
$ python -m datawelder.join out.csv partitions/names partitions/currencies --format csv
$ grep AND out.csv
AND,Principality of Andorra,AND,Euro

调整

您可以显式指定分区键

$ python -m datawelder.partition sampledata/names.csv partitions/names 5 --keyindex 0
$ python -m datawelder.partition sampledata/names.csv partitions/names 5 --keyname iso3

您可以显式指定任何格式参数(例如CSV分隔符)

$ python -m datawelder.partition sampledata/names.csv partitions/names 5 --fmtparams delimiter=',' lineterminator='\n'

同样,对于输出

$ python -m datawelder.join out.csv partitions/names partitions/currencies --format csv --fmtparams delimiter=;
$ grep AND out.csv
AND;Principality of Andorra;AND;Euro

其他格式透明工作

$ python -m datawelder.partition sampledata/names.json partitions/names 5 --keyname iso3

一旦您分区了数据集,它们原来的格式就无关紧要了。您可以轻松地将它们与任何其他分区数据集合并

$ python -m datawelder.join out.json partitions/names partitions/currencies --format json --subs 1
$ head -n 5 out.json
{"iso3": "AGO", "name": "Republic of Angola", "iso3_1": "AGO", "currency": "Kwanza"}
{"iso3": "AND", "name": "Principality of Andorra", "iso3_1": "AND", "currency": "Euro"}
{"iso3": "ARM", "name": "Republic of Armenia", "iso3_1": "ARM", "currency": "Dram"}
{"iso3": "ATF", "name": "French Southern and Antarctic Lands", "iso3_1": "ATF", "currency": "Euro"}
{"iso3": "AZE", "name": "Republic of Azerbaijan", "iso3_1": "AZE", "currency": "Manat"}

您还可以选择要保留的字段子集(类似于SQL SELECT)

$ python -m datawelder.join out.csv partitions/names partitions/currencies --format csv --select name,currency --subs 1
$ head -n 5 out.csv
name,currency
Republic of Angola,Kwanza
Principality of Andorra,Euro
Republic of Armenia,Dram
French Southern and Antarctic Lands,Euro

每个列的名称都以前面数据框的数字为前缀。例如,1.currency表示“来自数据框1的货币字段”。

您还可以根据需要重命名所选字段(类似于 SQL SELECT)。

$ python -m datawelder.join out.csv partitions/names partitions/currencies --format csv --select 'name as country_name, currency as curr' --subs 1
$ head -n 5 out.csv
country_name,curr
Republic of Angola,Kwanza
Principality of Andorra,Euro
Republic of Armenia,Dram
French Southern and Antarctic Lands,Euro

最后,您可以使用多个进程进行连接。默认情况下是 CPU 的数量。由于竞态条件,输出文件中行的顺序可能不同,但这不会影响数据的完整性。

$ python -m datawelder.join out.csv partitions/names partitions/currencies --format csv --select '0.name as name, 1.currency as curr' --subs 4

它是如何工作的?

首先,datawelder 使用分区键对每个数据集进行分区。由于数据集很小,我们使用了 5 个分区,但在处理真实数据时,您可以指定任意大小的分区。

在这种情况下,它自动识别文件的格式为 CSV。您可以通过手动指定格式和相关参数(例如字段分隔符、引号等)来提供帮助。

在上面的示例中,我们没有指定要使用的分区键,因此 datawelder 为我们选择了默认值(您可以覆盖它)。在上面的示例中,我们使用默认键(无论是什么第一列)将每个数据集分成 5 个分区,但您可以覆盖它。

功能

  • 通过子进程/多进程实现跨多个核心的并行化

  • 通过 smart_open 访问云存储进行读写,例如通过 S3。您无需在本地存储任何内容。

  • 开箱即用支持读写各种文件格式(CSV、JSON、pickle)

  • 灵活的 API 用于处理文件格式边缘情况

项目详情


下载文件

下载适用于您平台文件的文件。如果您不确定要选择哪一个,请了解更多关于 安装包 的信息。

源代码发行版

datawelder-0.9.0.tar.gz (19.5 kB 查看散列)

上传时间 源代码

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面