2016-09-20 17 views
1

我有一个RDD,其中包含importing from Postgres via JDBC的20个分区。我有一个拥有5名员工(5个核心)的群集。我只是想根据计算每个分区中元素的个数:RDD在群集中有20个分区,但没有工人正在使用

def count_in_a_partition(idx, iterator): 
    count = 0 
    for _ in iterator: 
    count += 1 
    return idx, count 

rdd.mapPartitionsWithIndex(count_in_a_partition).collect() 

上面的代码一直运行下去,和Web GUI显示,工人没有被利用所有,即“0使用” 。即使是Memory in use显示0.0 B Used。看起来有什么不对。你会期望至少有一名工人在做某事。我可以做些什么来加速计算和利用核心?

enter image description here

+1

嗨,你应该看看你的火花配置。将spark.executor.instances设置为(核心数量为1)大多数情况下都是可用的。你也可以减少执行者使用的内存。我从未见过等待状态...你确定postgre运作良好吗? – GwydionFR

+0

我认为你是正确的减少执行者使用的内存。谢谢! – FullStack

+0

你能分享你的spark-submit命令吗? – avrsanjay

回答

0

我认为Memory per Node: 20.0 GB比在每个节点2.7 GB的可用内存越大的问题。降低它有助于:

from pyspark.sql import SparkSession 

spark = SparkSession\ 
    .builder\ 
    .appName("jupyter-pyspark")\ 
    .master("spark://spark-master:7077")\ 
    .config("spark.executor.memory", "2g")\ 
    .config("spark.driver.memory", "2g")\ 
    .getOrCreate() 
相关问题