apache-spark
Konfiguracja: Apache Spark SQL
Szukaj…
Wprowadzenie
Kontrolowanie partycji Spark SQL Shuffle
W Apache Spark podczas wykonywania operacji cogroup
takich jak join
i cogroup
wiele danych jest przesyłanych przez sieć. Teraz, aby kontrolować liczbę partycji, na których odbywa się tasowanie, można kontrolować konfiguracje podane w Spark SQL. Ta konfiguracja jest następująca:
spark.sql.shuffle.partitions
Za pomocą tej konfiguracji możemy kontrolować liczbę partycji operacji losowych. Domyślnie jego wartość wynosi 200
. Ale 200 partycji nie ma sensu, jeśli mamy pliki o wielkości kilku GB. Dlatego powinniśmy je zmienić zgodnie z ilością danych potrzebnych do przetworzenia za pośrednictwem Spark SQL. Jak następuje:
W tym scenariuszu mamy dwie tabele do połączenia employee
i department
. Obie tabele zawierają tylko kilka rekordów, ale musimy do nich dołączyć, aby poznać dział każdego pracownika. Dołączamy do nich za pomocą Spark DataFrames w następujący sposób:
val conf = new SparkConf().setAppName("sample").setMaster("local")
val sc = new SparkContext(conf)
val employee = sc.parallelize(List("Bob", "Alice")).toDF("name")
val department = sc.parallelize(List(("Bob", "Accounts"), ("Alice", "Sales"))).toDF("name", "department")
employeeDF.join(departmentDF, "employeeName").show()
Teraz liczba partycji tworzonych podczas łączenia wynosi domyślnie 200, co jest oczywiście za dużo dla tak dużej ilości danych.
Zmieńmy więc tę wartość, abyśmy mogli zmniejszyć liczbę operacji losowych.
val conf = new SparkConf().setAppName("sample").setMaster("local").set("spark.sql.shuffle.partitions", 2)
val sc = new SparkContext(conf)
val employee = sc.parallelize(List("Bob", "Alice")).toDF("name")
val department = sc.parallelize(List(("Bob", "Accounts"), ("Alice", "Sales"))).toDF("name", "department")
employeeDF.join(departmentDF, "employeeName").show()
Teraz liczba partycji losowych została zmniejszona do zaledwie 2, co nie tylko zmniejszy liczbę operacji losowania, ale także skróci czas dołączania do DataFrames z 0.878505 s
do 0.077847 s
.
Dlatego zawsze konfiguruj liczbę partycji dla operacji losowych zgodnie z przetwarzanymi danymi.