以节省内存的方式处理一些数据
karld的Python项目详细描述
如何数据
- 拆分数据。
- 创建一个将数据作为迭代器的生成器,生成键和值对。
- 按键对每个键/值对列表进行排序。
- 使用heap按键合并键/值对列表。
- 按键对键/值对分组。
- 将每个键分组的值减少到一个值,从而产生一个键/值对。
您可以使用密钥函数代替密钥,只要它生成 在映射排序合并组阶段中使用相同的键。
分割数据
使用分割文件分割数据文件或使用分割csv文件分割 可能有多行字段以确保它们不被拆分的csv文件。:
import os import karld big_file_names = [ "bigfile1.csv", "bigfile2.csv", "bigfile3.csv" ] data_path = os.path.join('path','to','data', 'root') def main(): for filename in big_file_names: # Name the directory to write the split files into based # on the name of the file. out_dir = os.path.join(data_path, 'split_data', filename.replace('.csv', '')) # Split the file, with a default max_lines=200000 per shard of the file. karld.io.split_csv_file(os.path.join(data_path, filename), out_dir) if __name__ == "__main__": main()
当您生成数据并希望根据数量将其分片到文件时,请使用 拆分输出函数之一,如split_file_output_csv、split_file_output或 split_file_output_json:
import os import pathlib import karld def main(): """ Python 2 version """ items = (str(x) + os.linesep for x in range(2000)) out_dir = pathlib.Path('shgen') karld.io.ensure_dir(str(out_dir)) karld.io.split_file_output('big_data', items, str(out_dir)) if __name__ == "__main__": main()
CSV可序列化数据:
import pathlib import karld def main(): """ From a source of data, shard it to csv files. """ if karld.is_py3(): third = chr else: third = unichr # Your data source items = ((x, x + 1, third(x + 10)) for x in range(2000)) out_dir = pathlib.Path('shard_out_csv') karld.io.ensure_dir(str(out_dir)) karld.io.split_file_output_csv('big_data.csv', items, str(out_dir)) if __name__ == "__main__": main()
JSON可序列化数据行:
import pathlib import karld def main(): """ From a source of data, shard it to csv files. """ if karld.is_py3(): third = chr else: third = unichr # Your data source items = ((x, x + 1, third(x + 10)) for x in range(2000)) out_dir = pathlib.Path('shard_out_json') karld.io.ensure_dir(str(out_dir)) karld.io.split_file_output_json('big_data.json', items, str(out_dir)) if __name__ == "__main__": main()
文档
阅读文档:http://karld.readthedocs.org/en/latest/
已在http://karld.readthedocs.org/en/latest/getting-started.html展开“入门”。
更多的例子记录在http://karld.readthedocs.org/en/latest/source/example.html。查看 示例文件的源,例如…
贡献:
在这里提交任何问题:https://github.com/johnwlockwood/karl_data/issues。
- 向development的分支发出pull请求
- https://github.com/johnwlockwood/karl_data.
- documentation是用structuredtext编写的,当前使用
- 狮身人面像风格 列表http://sphinx-doc.org/domains.html#info-field-lists
查看关闭的pull请求,查看开发流程 对master的每个更改都是通过github上的pull请求完成的。代码评审 是受欢迎的,即使是合并的请求。请随意提问 密码。