Szukaj…


Wprowadzenie

W tym temacie Użytkownicy Spark mogą znaleźć różne konfiguracje Spark SQL, który jest najczęściej używanym składnikiem frameworka Apache Spark.

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.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow