Skip to main content
 首页 » 编程设计

julia之与 Python 相比,在 Julia 中读取 csv 速度较慢

2024年12月31日11Terrylee

与 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) 
  • Julia 比 R 快,但与 Python 相比相当慢。我可以采取什么不同的方式来加快读取大型文本文件的速度?
  • 一个单独的问题是内存中的大小是 Julia 中硬盘文件大小的 18 倍,但 Python 中仅为 2.5 倍。在 Matlab 中,我发现它对于大文件的内存效率最高,它是硬盘文件大小的 2 倍。 Julia 内存中大文件大小的任何特殊原因?
  • 请您参考如下方法:

    最好的答案可能是我不如 Wes 是一个优秀的程序员。
    一般来说,DataFrames 中的代码不如 Pandas 中的代码优化得好。我相信我们可以迎头 catch ,但这需要一些时间,因为我们需要首先实现许多基本功能。由于需要在 Julia 中构建的内容太多,我倾向于将工作重点放在三个部分:(1) 构建任何版本,(2) 构建正确的版本,(3) 构建快速、正确的版本。对于我所做的工作,Julia 通常不提供任何版本的基本功能,因此我的工作重点放在 (1) 和 (2) 上。随着我需要的工具越来越多,专注于性能会更容易。
    至于内存使用,我认为答案是我们在解析表格数据时使用的一组数据结构比 Pandas 使用的效率低得多。如果我更了解 Pandas 的内部结构,我可以列出我们效率较低的地方,但现在我只是推测一个明显的失败是我们正在将整个数据集读入内存而不是从磁盘中抓取块.这当然是可以避免的,这样做也存在一些问题。这只是时间问题。
    关于这一点,readtable代码相当容易阅读。最确定的获取方式readtable更快的是推出 Julia 分析器并开始修复它发现的性能缺陷。