【问题标题】:How to write and read data efficiently in python?如何在python中高效地读写数据?
【发布时间】:2020-04-05 22:40:04
【问题描述】:

我的应用程序需要定期处理数据。应用程序需要处理新数据,然后将其与旧数据合并。数据可能有数十亿行,只有两列,第一列是行名,第二列是值。下面是一个例子:

a00001,12
a00002,2321
a00003,234

新数据可能有新的行名或旧的。我想合并它们。因此,在处理过程中的每个过程中,我都需要读取旧的大数据文件并将其与新的大数据文件合并。然后我将新数据写入一个新文件。

我发现最耗时的过程是读写数据。我尝试了几种数据I/O方式。

  1. 原始读写文本。这是最耗时的方式
  2. Python pickle 包,但是对于大数据文件效率不高

还有其他的数据I/O格式或者包可以在python中高效的加载和写入大数据吗?

【问题讨论】:

  • 为了处理数十亿行,我的建议是使用 Apache Spark 和 pyspark。
  • @HenriqueBranco 使用 apache spark 会带来更多的硬件和维护成本。而且一开始可能只有一千万

标签: python pickle h5py


【解决方案1】:

如果您有如此大量的数据,尝试降低您必须读取和写入的数据量可能会更快。

您可以将数据分散到多个文件中,而不是将其全部保存在一个文件中。 处理新数据时,检查哪些旧数据需要合并,然后读写那些特定的文件。

您的数据有两行:

name1, data1
name2, data2

包含旧数据的文件:

db_1.dat,               db_2.dat,                 db_3.dat
name_1: data_1          name_1001: data_1001      name_2001: data_2001
.                       .                         .
.                       .                         .
.                       .                         .                
name_1000: data_1000    name_2000: data_2000      name_3000: data_3000 

现在您可以检查需要合并哪些数据,然后只读取和写入包含该数据的特定文件。

不确定您要实现的目标是否允许这样的系统,但由于要处理的数据较少,它会加快进程。

【讨论】:

  • 这个方法看起来不错。我可以根据键范围将旧数据拆分为不同的文件。然后我可以将新文件与指定文件合并。谢谢!
【解决方案2】:

也许这个article 可以帮助你。看起来fatherparquet 可能很有趣。

【讨论】:

  • 欢迎来到 StackOverflow!虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。
  • 这篇文章是我想要的。我将测试这些文件格式。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-15
  • 1970-01-01
  • 2022-09-20
  • 1970-01-01
  • 2014-11-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多