作者:Damian Eads, June 7, 2016 尽管在数据驱动的工作中,大多数人们都会使用分布式数据库与文件系统,但是在单机上快速读取一个文件的需求仍然坚挺地存在着。令人惊讶的是,大多数现代的文件读取器并没有利用起多核的架构,导致在高性能存储系统中大量的I/O带宽被闲置。在这里介绍的ParaText可以在单个多核机器上并行地读取文件以更有效地使用带宽。Alpha版本包含了一个并行CSV读取器。 在大约50年里,CSV一直被用做表格式数据的格式。由于CSV文件随处可见,且在实际的工作流中处理CSV文件的需求也随处可见——在这里速度,精度和容错率都是必须的指标——因而我们决定构建一个并行的CSV读取器。 我们还额外比较了ParaText和7个CSV读取器以及5个二进制读取器的性能。更多细节请参考我们的性能白皮书。在我们的测试中,ParaText可以以2.5GB/s的速度从一个磁盘加载一个CSV文件到内存,以及4.2GB/s的速度从内存写入外存。ParaText可以在30分钟内对一个5TB的CSV文件完成解析及基于外存的计算。 为什么选CSV? CSV的简洁性是十分诱人的。从概念上讲,CSV十分易于解析。它也是人类可读的。电子表格软件以及COBOL时期遗留的一些数据库至少可以读写CSV文件。的确,CSV被广泛用于交换表格化数据,但是不幸的是,RFC标准没有跟紧实践的步伐,导致CSV文件的扩展道路被扭曲了。CSV的格式缺少一个全世界都接受的模式,导致即使是“合适”的CSV文件也可能有模糊不清的语义,进而使每个应用对其有了不同的解释。 尽管CSV存在这样的问题,社区仍旧需要鲁棒的工具来处理CSV数据。我们开始时构建了一个迅速的,内存使用高效的,通用的多核文本读取器。我们的CSV读取器是第一个使用这一基础读取器的成果。 发布与性能的亮点 ParaText CSV读取器支持整型,浮点型,文本以及可分类数据类型。它总是使用最窄的比特深度来节省内存。文本域可以多行扩展。一个小型的可分类编码可以将重复的字符串映射为整数来降低内存占用率。 ParaText可以用一行代码加载一个CSV文件到Pandas DataFrame。
在我们的性能分析中,我们证明了ParaText的速度,效率,更多细节请参考性能白皮书。 数据 用于我们的性能测试的文件的大小从21MB到5.076TB。白皮书中描述了每个数据集的特性以及如何下载他们。 每个数据集及每种文件格式的文件大小。二进制文件要比CSV文件更小。 1.ParaText是很快的! ParaText有比其他任何在每个数据集上都测试过的CSV读取器更高的吞吐量。
2.ParaText内存使用很有效! ParaText有最少的内存使用量。对Dato SFrame来说,如果数据帧存储在Dato的内核时,它就有非常低的内存使用量。Spark预留了大量的堆空间。因此很难表述它的内存使用效率,进而更好地指导如何为Spark任务准备资源。
3.ParaText对阵二进制:仍然很快! 出色的二进制读取器可以不经任何解析,类型判断或错误检查地读取大量小型的文件。正如预料的那样,二进制读取器在比CSV小10倍的二进制文件读取上超过了CSV。
然而,我们测试的二进制读取器和ParaText相比,其I/O带宽要低的多。
4.数据帧的快速转换 Spark DataFrame, Dato SFrame, 和ParaText都可以用一行代码将他们内部表示的数据转换为一个Python的对象。这提高了数据科学的交互体验。 这种转换是数据科学中交互体验的一个重要部分。ParaText可以在数秒内转换一个数GB的数据集,而Spark和Dato却需要几分钟。
5.ParaText更加便宜! 按比例分配的Amazon Web Services(AWS)对Wise ParaText的成本与其他方法相比却是不成比例地低。
6.ParaText接近了硬件极限! 我们定义了两个基准任务来建立CSV加载吞吐量的上界:换行符计数以及外存CSV解析。ParaText达到了非常接近由任务预估的I/O带宽的吞吐量。
7.ParaText是媒介数据 ParaText可以轻松处理数TB级别的数据。在我们的测试中,ParaText和Spark是仅有的能够单机成功加载并计算一个超过1TB的文件。
感兴趣吗? 访问GitHub并试一试ParaText吧。我们期待听到你的声音! 英文原文:http://www./tech/paratext |
|