优化 Spark 数值函数 (python)
Optimize Spark Numeric Functions (python)
Spark 新手,希望了解优化以下代码的最佳方法。
我有一个包含 5GB 文件的文件,其中包含 50 列,我从中提取了大约 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])
- 您可以使用
aggregate
函数(http://spark.apache.org/docs/1.2.0/api/python/pyspark.html#pyspark.RDD). Here's an example of similar approach with aggregateByKey
function: How to optimize this code on spark? 一次遍历数据计算出许多统计数据
- 每次为一列保留 RDD。为什么不缓存
myData
RDD 呢?每次构造myData3 RDD都会物化,也就是30次!
最后,使用 aggregate
函数,您将能够通过一次数据计算所有统计数据
Spark 新手,希望了解优化以下代码的最佳方法。 我有一个包含 5GB 文件的文件,其中包含 50 列,我从中提取了大约 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])
- 您可以使用
aggregate
函数(http://spark.apache.org/docs/1.2.0/api/python/pyspark.html#pyspark.RDD). Here's an example of similar approach withaggregateByKey
function: How to optimize this code on spark? 一次遍历数据计算出许多统计数据
- 每次为一列保留 RDD。为什么不缓存
myData
RDD 呢?每次构造myData3 RDD都会物化,也就是30次!
最后,使用 aggregate
函数,您将能够通过一次数据计算所有统计数据