JuliaDB或DataFrame比普通数组快吗?

Ale*_*hin 9 julia

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

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

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

Bog*_*ski 13

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

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

  1. 它们允许您存储具有不同类型的数据列.您可以在数组中执行相同的操作,但是它们必须是Any一般的数组,这些数组将比具有具体类型的数据列更慢并占用更多内存.
  2. 您可以使用名称访问列.但是,这是次要功能 - 例如,NamedArrays.jl提供了具有命名维度的类数组类型.
  3. 另外一个好处是,有一个生态系统建立在列具有名称的事实上(例如,DataFrame使用GLM.jl 连接两个或构建GLM模型).

这种类型的存储(具有名称的异构列)是关系数据库中表的表示.

DataFrames.jl和JuliaDB.jl有什么区别

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

  • AFAIK MixedModels.jl 是不可能的,但也许 https://github.com/joshday/OnlineStats.jl 与 JuliaDB 很好地配合对你来说就足够了(它已经支持许多模型)。 (2认同)