大型文件的并行解析器

parpar的Python项目详细描述


关于

parpar(parallel parser)是一个轻量级的工具,它可以很容易地将函数分布到一个大文件中。

parpar用于序列化数据,其中某些值在给定字段的记录中高度重复。例如

a 1 1
a 1 2
a 2 3
a 2 4
a 3 5
a 3 6
b 1 7
b 1 8
b 2 9
b 2 10
b 3 11
b 3 12

虽然我们有12条记录,但对于第1列,只有2个唯一值。同样,对于列2,只有3个唯一值。我们可以将此文件分解为目录下的较小文件:

<out-dir>/<col-1-value>/<col-2-value>

反之亦然。

如何使用。

  1. 首先导入parpar类:
fromparparimportParPar
  1. 初始化实例:
ppf=ParPar()
  1. 将大文件分成子文件:
# shard by columnsppf.shard(<input-file>,<output-directory>,<columns>,<delim>,<newline>)# shard by linesppf.shard_by_lines(<input-file>,<output-directory>,<number_of_lines>,<delim>,<newline>)
  1. 检查以确保记录数相同:
files=ppf.shard_files(<output-directory>)records=ppf.sharded_records(files)fromparpar.utilsimportfilelinesprint(records==filelines(<input-file>))
  1. 在所有共享文件的每个line之间映射任意函数:
deffoo(line,*args,**kwargs):passargs=[1,2,3]kwargs={'a':'x','b':'y'}ppf.shard_line_apply(<output-directory>,foo,args,kwargs,processes=<number-of-processes>)
  1. 在所有共享文件中映射任意函数:
defbar(file,*args,**kwargs):passargs=[1,2,3]kwargs={'a':'x','b':'y'}ppf.shard_file_apply(<output-directory>,bar,args,kwargs,processes=<number-of-processes>)

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

推荐PyPI第三方库


热门话题
javai是JAXB的新手。如何将两个具有不同名称空间的不同xml合并为一个具有根元素的xml并将其解组?   JDO中的java应该是可传递的DefaultFetchGroup吗   java服务器配置问题   java在理解JList时遇到困难   java何时将RequestContextFilter用于Jersey?   java从数据库中读取文本文件。jar文件   Java正则表达式,仅适用于不包括零的正数   爪哇番石榴。类路径中的jar   JavaEE:关于设计的问题   java GUI,在面板中排列按钮   java Android为什么使用接口被认为是活动和片段之间通信的最佳实践?   java如何获取wicket图像的url以在开放图元标记中使用它   从Java字节[]>Base64>Javascript数组缓冲>Base64>byte[]   java正则表达式帮助字符串JWE766。1.pdf格式摘录766   java Hibernate,JPA忽略@Formula