2016-09-20 6 views
1

importing from Postgres via JDBCから20個のパーティションを持つRDDがあります。私は5人の労働者(5つのコア)を持つクラスタを持っています。私は単純に応じて、各パーティション内の要素の数をカウントしようとしています:クラスタ内に20個のパーティションがあり、使用されている作業者がいないRDD

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と表示されます。何か間違っているようです。あなたは少なくとも1人の労働者が何かをしていることを期待します。計算をスピードアップしてコアを利用するには、どうすればよいでしょうか?

enter image description here

+1

こんにちは、あなたの火花の設定で目を覚ます必要があります。 spark.executor.instancesを(コア数-1)に設定すると、ほとんどの場合動作します。また、エグゼキュータによって使用されるメモリを減らすことができます。私は待っている状態を見たことはありません...ポストグレがうまくいくのは確かですか? – GwydionFR

+0

私はエグゼキュータによって使用されるメモリを減らすことが正しいと思います。ありがとう! – FullStack

+0

spark-submitコマンドを共有できますか? – avrsanjay

答えて

0

私はMemory per Node: 20.0 GB2.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() 
関連する問題