如何有效地将大型DataFrame列作为值列表发送到Function

时间:2016-12-31 09:37:07

标签: apache-spark pyspark spark-dataframe

我试图在DataFrame列上找到一个统计量(基尼系数),我需要将特定列的所有值传递给函数以计算统计量(基尼系数)。

这里,统计函数需要“值列表”并返回整数。 为了从DataFrame列中收集值列表,我尝试了以下两种方法。

方法1:

  1. 从DataFrame中选择列。
  2. 将其转换为RDD。
  3. 将每个值映射到(1,值)
  4. groupByKey聚合所有值。
  5. 将汇总值发送到统计函数以计算统计量。
  6. 方法2:

    1. 从DataFrame中选择列。
    2. 将其转换为RDD。
    3. 执行收集操作以汇总值。
    4. 将汇总值发送到统计函数以计算统计量。
    5. 但这两种方法似乎都很慢。

      请您分享建议或其他任何有效方式。

      此致 Neeraj

1 个答案:

答案 0 :(得分:0)

如果数据已排序且没有负数或零,您可以使用此页面中描述的第三个公式计算基尼系数:

http://www.statsdirect.com/help/default.htm#nonparametric_methods/gini.htm

https://github.com/oliviaguest/gini中提供了Python实现。

使用数据框的df.groupBy().sum()操作来计算总和是很容易的。