我想知道普通数组与 JuliaDB 或 DataFrame 在大型数据集(很大但仍然适合内存)上进行计算的性能是否存在差异?
我可以使用普通数组和算法来进行排序、分组、归约等。那么为什么我需要 JuliaDB 或 DataFrame?
我有点理解为什么 Python 需要 Pandas - 因为它将慢速的 python 转换为快速的 C。但是为什么 Julia 需要 JuliaDB 或 DataFrame - Julia 已经很快了。
这可能是一个广泛的话题。让我重点介绍我认为的关键功能。
DataFrames.jl 或 JuliaDB.jl 相对于标准数组有哪些优势
- 它们允许您存储不同类型的数据列。您可以在数组中执行相同的操作,但它们必须是数组
Any
一般来说,与具有具体类型的数据列相比,这会更慢并且占用更多内存。
- 您可以使用名称访问列。然而,这是次要特征 - 例如NamedArrays.jl 提供具有命名维度的类数组类型。
- 额外的好处是,有一个生态系统建立在列有名称的事实之上(例如,连接两个
DataFrame
s 或使用 GLM.jl 构建 GLM 模型)。
这种类型的存储(具有名称的异构列)是关系数据库中表的表示。
DataFrames.jl 和 JuliaDB.jl 有什么区别
- JuliaDB.jl支持分布式并行; DataFrames.jl 的正常使用假设数据适合内存(您可以使用
SharedArray
但这不是设计的一部分),如果你想并行计算,你必须手动完成;
- JuliaDB.jl 支持索引,而 DataFrames.jl 目前不支持;
- Column types of JuliaDB.jl are stable and for DataFrames.jl currently they are not. The consequences are:
- 当每次创建新类型的数据结构时使用 JuliaDB.jl 时,必须重新编译应用于该类型的所有函数(对于大型数据集可以忽略,但在处理许多异构小数据集时可以具有可见的性能影响);
- 使用 DataFrames.jl 时,在某些情况下,您必须使用特殊技术来确保类型推断以实现高性能(最值得注意的是所讨论的屏障函数)here https://github.com/bkamins/Julia-DataFrames-Tutorial/blob/master/11_performance.ipynb).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)