PySpark任务未并行运行

时间:2018-07-20 15:52:59

标签: apache-spark pyspark

我有一个Spark集群设置,其中包含一个节点和一个执行程序,以及8个执行程序核心。我正在尝试使用地图功能并行执行“ requests.get”功能。这是伪代码:

sc = SparkContext()
url_list = ["a.com", "b.com", "c.com", .....]

def request(url):
    page = requests.get(url)
    return page.content

result = sc.parallelize(url_list).map(request).collect()

由于我在配置中设置了8个内核,因此我希望http请求同时在执行程序上发生。但是,它正在按顺序请求。我知道它并不是针对这样的用户案例设计的。但是任何人都可以帮助我了解为什么它不能基于核心号并行运行。另外,如何获得我想要的是在spark执行程序上或在不同执行程序上并行运行请求的

1 个答案:

答案 0 :(得分:0)

尝试sc.parallelize(url_list, 8)

不指定切片数,您可能仅在RDD中获得一个分区,因此map API可能仅启动一个任务来处理该分区,因此request()将被依次调用该分区的每一行。

您可以检查一下有多少个分区:

rdd = sc.parallelize(url_list)  # or with the  ,8)
print rdd.getNumPartitions()
rdd.map(...