2016-09-20 127 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() 
相關問題