2016-10-24 11 views
0

私は大量のデータを持っており、効率的に(つまり、比較的小さなSparkクラスタを使用して)COUNTおよびDISTINCT操作の1つを実行することを検討しています。その後、csvsでsparkでCOUNT DISTINCTを効率的に実行できますか?

df = spark.read.format("CSV").load("s3://somebucket/loadsofcsvdata/*").toDF() 
df.registerView("someview") 

し、クエリを実行しようとすると::

私が明白と思われるものを行う場合、すなわちデータフレームにデータをロード

domains = sqlContext.sql("""SELECT domain, COUNT(id) FROM someview GROUP BY domain""") 
domains.take(1000).show() 

私クラスタだけでクラッシュし、やけどを - 投げ操作の中断/クラッシュ/完了していないことを確認します。

私は途中で、エグゼクティブの記憶の1つを吹き飛ばしているようなものがあると思いますか?

ソースデータが大規模でターゲットデータがない場合(上記のクエリのドメインリストは比較的短く、メモリに簡単に収まるはずです)、このような操作を実行する理想的な方法は何ですか?この質問でご利用いただけます


関連情報:What should be the optimal value for spark.sql.shuffle.partitions or how do we increase partitions when using Spark SQL?

答えて

1

私はあなたのエグゼキュータの設定を調整することをお勧め。特に、以下のパラメータを正しく設定することで、パフォーマンスが大幅に向上します。あなたのケースでは

spark.executor.instances 
spark.executor.memory 
spark.yarn.executor.memoryOverhead 
spark.executor.cores 

、私はまた、特に要件ごとに、より高い値にデフォルトの200からのparamを以下つり上げる、パーティションの曲数を示唆しています。

spark.sql.shuffle.partitions 
関連する問題