【问题标题】:extracting the top 25 percentile of a sub list in a large data file提取大型数据文件中子列表的前 25 个百分位
【发布时间】:2017-05-15 12:49:12
【问题描述】:

我有一个包含三列的大型 csv 文件:AID, VID, Rel

文件大小为 21 GB。

  1. 我想对它进行排序,使 AID 后跟 Rel。结果应如下所示:

    AID    VID   Rel
    A      3     0.9
    A      4     0.88
    A      5     0.87
    A      1     0.7
    A      2     0.5
    A      6     0.4
    A      7     0.35
    A      8     0.3
    B      3     0.9
    B      1     0.8
    B      2     0.7
    B      4     0.6
    
  2. 排序后,我需要一次提取每个 AID“块”,并提取其前 25 个百分位数中的行。

我是处理大数据的新手,不知道该怎么做。

我曾尝试使用 Python pandas,但它一直在崩溃。我也尝试过使用 Python 的 dask,但它没有排序。

如果有帮助,我可以访问 HPC 集群。

【问题讨论】:

  • 启动一个 Amazon Redshift 集群,它可以轻松处理 Tera 字节的数据,而且成本几乎为零。

标签: python pandas sorting dask bigdata


【解决方案1】:

标准 pandas 语法似乎可以为您解决这个问题:

import dask.dataframe as dd df = dd.read_csv(...) out = df.groupby('AID').apply( lambda f: f[f.Rel > f.Rel.quantile(0.75)].sort_values( 'Rel', ascending=False), meta=df)

out 现在是一个 dask 数据帧,它可能也不适合内存,所以接下来如何处理它取决于您(提取一些子集、进行计算、聚合...)。

由于这涉及混洗数据,您仍然可能耗尽内存,具体取决于您拥有的组数以及您用于加载 CSV 的大小/块。

【讨论】:

    猜你喜欢
    • 2015-08-16
    • 2018-09-05
    • 1970-01-01
    • 2013-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-07
    相关资源
    最近更新 更多