JuliaDB或DataFrame比普通数组更快吗?

时间:2018-03-26 15:35:12

标签: julia

我想知道普通数据与JuliaDB或DataFrame的性能是否存在差异,以便对大型数据集进行计算(大但仍适合内存)?

我可以使用普通数组和算法进行排序,分组,减少等等。那么为什么我需要JuliaDB或DataFrame?

我有点理解为什么Python需要Pandas - 因为它将慢速python转换为快速C.但为什么Julia需要JuliaDB或DataFrame - Julia已经很快。

1 个答案:

答案 0 :(得分:12)

这可能是一个广泛的主题。让我重点介绍一下我认为关键的功能。

DataFrames.jl或JuliaDB.jl相对于标准数组有什么好处

  1. 它们允许您存储具有不同类型的数据列。您可以在数组中执行相同的操作,但是它们通常必须是Any的数组,这将比使用具体类型的数据列更慢并占用更多内存。
  2. 您可以使用名称访问列。然而,这是次要特征 - 例如NamedArrays.jl提供了一个类似于数组的类型,其命名维度。
  3. 额外的好处是,有一个生态系统建立在列具有名称的事实上(例如,使用GLM.jl连接两个DataFrame或构建GLM模型)。
  4. 这种类型的存储(带有名称的异构列)是关系数据库中表的表示。

    DataFrames.jl和JuliaDB.jl

    之间有什么区别
    1. JuliaDB.jl支持分布式并行;正常使用DataFrames.jl假设数据适合内存(您可以使用SharedArray解决此问题,但这不是设计的一部分)如果您想并行计算,则必须手动执行;
    2. JuliaDB.jl支持索引,而DataFrames.jl当前不支持;
    3. JuliaDB.jl的列类型是稳定的,而对于DataFrames.jl,它们不是。后果是:
      • 每次创建新类型的数据结构时使用JuliaDB.jl时,必须重新编译应用于此类型的所有函数(对于大型数据集,可以忽略这些函数,但是当处理许多异构小数据集时可以可见的性能影响);
      • 使用DataFrames.jl时,您必须使用特殊技术,确保在某些情况下确保类型推断以实现高性能(最明显的是屏障函数,如所讨论的here)。