了解Pyspark中的并行性

时间:2019-03-14 15:15:04

标签: python apache-spark parallel-processing pyspark

我正在尝试找出在Pyspark中分配资源和创建任务的正确方法。

我有以下python代码:

import time
def xxx():
    tt=[]
    x=time.time()
    for i in range(0,4):
        for j in range(0,100000000):
            tt.append((i/2)*3)
    print(time.time()-x)
    return tt 

这是一个简单的嵌套循环,它在每次迭代中进行一些计算并将值附加在列表中。 在本地计算机上运行此代码平均需要80秒(使用python3.7)才能完成。

以下是我在Pyspark中并行化先前代码的尝试:

t.py:

from pyspark import SparkContext, SparkConf
import os
import time
import random


if __name__ == "__main__":
    conf = SparkConf().setAppName("App")
    conf = (conf.setMaster('local[*]'))
    sc = SparkContext(conf=conf)
    x=time.time()
    a_loop = lambda x: ((y/2)*3 for y in range(100000000))
    q=sc.parallelize(range(4)).flatMap(a_loop)
    q=q.collect()
    print(len(q))
    print(time.time()-x)
    sc.stop()

以下配置导致以下时间:

spark-submit --driver-memory 10g --executor-memory 500m --conf spark.sql.shuffle.partitions=10 --conf spark.driver.maxResultSize=10g --executor-cores=4 t.py

所需时间:824.13秒。

我已经尝试过这种配置的许多变体,但是在700秒以下却没有得到任何数字。


此外,我注意到该应用程序占用大量内存,但我不知道为什么:

enter image description here

所以我的问题是:我是否在并行方法中犯了一些根本性的错误?我是错误地使用代码还是配置或两者都使用?

PS。我的机器有2个物理和4个逻辑内核,以及8 GB RAM。

0 个答案:

没有答案