大型文件的并行解析器
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>
反之亦然。
如何使用。
- 首先导入parpar类:
fromparparimportParPar
- 初始化实例:
ppf=ParPar()
- 将大文件分成子文件:
# 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>)
- 检查以确保记录数相同:
files=ppf.shard_files(<output-directory>)records=ppf.sharded_records(files)fromparpar.utilsimportfilelinesprint(records==filelines(<input-file>))
- 在所有共享文件的每个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>)
- 在所有共享文件中映射任意函数:
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>)