优化Spark数字函数(python)

时间:2015-03-02 20:37:04

标签: python hadoop apache-spark

Spark的新手,希望看到优化以下代码的最佳方法。 我有一个包含50个列的5GB文件的文件,我从中获取了大约30列(在下面的可变位置)。然后运行各种统计数据。

def numStats(position):
    results = []
    for lines in position:
        stats = [0,0,0,0,0,0,0,0]
        myData = dataSplit.map(lambda arr: (arr[lines]))
        if myData.take(1) != [u'']:
            myData3 = myData.map(lambda line: line.split(',')).map(lambda fields: ("Column", float(fields[0]))).map(lambda (column, value) : (value)).persist(StorageLevel.MEMORY_AND_DISK)
            stats[0] = myData3.sum()
            results.append(stats[0])
            stats[1] = myData3.min()
            results.append(stats[1])
            stats[2] = myData3.max()
            results.append(stats[2])
            stats[3] = myData3.mean()
            results.append(stats[3])
            stats[4] = myData3.stdev()
            results.append(stats[4])
            stats[5] = myData3.variance()
            results.append(stats[5])
            stats[6] = myData3.sampleStdev()
            results.append(stats[6])
            stats[7] = myData3.sampleVariance()
            results.append(stats[7])

1 个答案:

答案 0 :(得分:0)

  1. 您可以使用aggregate函数(http://spark.apache.org/docs/1.2.0/api/python/pyspark.html#pyspark.RDD)计算单次传递中的许多统计信息。以下是使用aggregateByKey函数的类似方法的示例:How to optimize this code on spark?
  2. 每次为一列保留RDD。为什么不要缓存myData RDD呢?每次构造myData3 RDD时都会实现它,这意味着30次!
  3. 最后,使用aggregate功能,您可以计算一次通过数据的所有统计信息