与 Python 相比,在 Julia 中读取大文本/csv 文件需要很长时间。以下是读取大小为 486.6 MB 且具有 153895 行和 644 列的文件的时间。
python 3.3 示例
import pandas as pd
import time
start=time.time()
myData=pd.read_csv("C:\\myFile.txt",sep="|",header=None,low_memory=False)
print(time.time()-start)
Output: 19.90
R 3.0.2 示例
system.time(myData<-read.delim("C:/myFile.txt",sep="|",header=F,
stringsAsFactors=F,na.strings=""))
Output:
User System Elapsed
181.13 1.07 182.32
Julia 0.2.0 (Julia Studio 0.4.4) 示例 #1
using DataFrames
timing = @time myData = readtable("C:/myFile.txt",separator='|',header=false)
Output:
elapsed time: 80.35 seconds (10319624244 bytes allocated)
Julia 0.2.0 (Julia Studio 0.4.4) 示例 #2
timing = @time myData = readdlm("C:/myFile.txt",'|',header=false)
Output:
elapsed time: 65.96 seconds (9087413564 bytes allocated)
请您参考如下方法:
最好的答案可能是我不如 Wes 是一个优秀的程序员。
一般来说,DataFrames 中的代码不如 Pandas 中的代码优化得好。我相信我们可以迎头 catch ,但这需要一些时间,因为我们需要首先实现许多基本功能。由于需要在 Julia 中构建的内容太多,我倾向于将工作重点放在三个部分:(1) 构建任何版本,(2) 构建正确的版本,(3) 构建快速、正确的版本。对于我所做的工作,Julia 通常不提供任何版本的基本功能,因此我的工作重点放在 (1) 和 (2) 上。随着我需要的工具越来越多,专注于性能会更容易。
至于内存使用,我认为答案是我们在解析表格数据时使用的一组数据结构比 Pandas 使用的效率低得多。如果我更了解 Pandas 的内部结构,我可以列出我们效率较低的地方,但现在我只是推测一个明显的失败是我们正在将整个数据集读入内存而不是从磁盘中抓取块.这当然是可以避免的,这样做也存在一些问题。这只是时间问题。
关于这一点,readtable
代码相当容易阅读。最确定的获取方式readtable
更快的是推出 Julia 分析器并开始修复它发现的性能缺陷。