Partycjonowanie według wielu kolumn w PySpark z kolumnami na liście
Czy zastanawiałeś się kiedyś, w jaki sposób firmy przetwarzające dane efektywnie zarządzają ogromnymi zbiorami danych? Kluczową metodą stosowaną w tym przypadku jest partycjonowanie. W tym artykule na blogu przyjrzymy się idei partycjonowania w PySpark, ze szczególnym naciskiem na partycjonowanie przy użyciu listy według kilku kolumn. Omówimy ten proces krok po kroku, tak aby nawet początkujący mógł go zrozumieć.
Wstęp
W dzisiejszym świecie dużych zbiorów danych wydajne przetwarzanie dużych zbiorów danych i zarządzanie nimi ma kluczowe znaczenie. Skutecznym rozwiązaniem do zarządzania takimi zadaniami jest Apache Spark, a w szczególności PySpark (interfejs Python API dla Spark). „Partycjonowanie” to jedna z najlepszych strategii maksymalizacji szybkości zapytań i zarządzania danymi w PySpark. Pomysł partycjonowania w PySpark zostanie omówiony w tym artykule na blogu, ze szczególnym naciskiem na sposób dzielenia listy kolumn na wiele kolumn.
Co to jest partycjonowanie?
Proces partycjonowania polega na dzieleniu dużych zbiorów danych na mniejsze, łatwiejsze w zarządzaniu segmenty, zwane „partycjami”. PySpark może teraz działać na wielu mniejszych plikach jednocześnie, oszczędzając czas przetwarzania, eliminując potrzebę pracy na jednym, dużym pliku. To tak, jakby pokroić dużą pizzę, żeby wszyscy mogli szybciej zjeść!
Po co dzielić według wielu kolumn?
Partycjonowanie według wielu kolumn oznacza dzielenie zbioru danych na podstawie więcej niż jednej kolumny. Na przykład, jeśli masz zbiór danych uczniów z kolumnami „klasa” i „sekcja”, możesz podzielić dane zarówno według „klasy”, jak i „sekcji”. Pomaga to w lepszym uporządkowaniu danych i przyspiesza czas przetwarzania niektórych operacji.
Wyjaśniona terminologia
Zanim zagłębimy się w kod, zdefiniujmy kilka ważnych terminów:
- PySpark: interfejs API języka Python dla Apache Spark, który umożliwia korzystanie z możliwości przetwarzania rozproszonego platformy Spark.
- Partycja: mały podzbiór danych fizycznie podzielony na mniejsze pliki na dysku w celu poprawy wydajności odczytu i zapisu.
- DataFrame: dwuwymiarowa, przypominająca tabelę struktura w PySpark, która może przechowywać dane w wierszach i kolumnach, podobnie jak w arkuszu kalkulacyjnym lub tabeli SQL.
- Kolumna: w tabeli (lub ramce danych) kolumna reprezentuje określone pole danych, np. „Wiek” lub „Lokalizacja”.
- Lista: zbiór elementów przechowywanych w określonej kolejności. W Pythonie listy mogą zawierać wartości takie jak liczby lub ciągi znaków, są elastyczne i łatwe w użyciu.
Dlaczego warto używać partycjonowania w PySpark?
Partycjonowanie pomaga w następujący sposób:
- Wzrost wydajności: gdy dane są podzielone na partycje, PySpark może zrównoleglić odczyt i przetwarzanie danych w wielu węzłach, co przyspiesza działanie.
- Efektywne pobieranie danych: PySpark po prostu przeskanuje wymagane partycje, zapisując operacje we/wy, zamiast skanować cały zestaw danych.
- Skalowalność: gdy zadanie jest podzielone pomiędzy partycje, zarządzanie dużymi zbiorami danych staje się prostsze.
Przewodnik krok po kroku: Partycjonowanie według wielu kolumn w PySpark
W tej sekcji dowiesz się, jak używać publicznego zestawu danych w programie PySpark do dzielenia zestawu danych na kilka kolumn. W tym przykładzie wykorzystamy dobrze znany zbiór danych „Iris”, który zawiera szczegółowe informacje na temat kilku gatunków kwiatów i ich wymiarów.
Krok 1: Instalowanie wymaganych bibliotek
pip install pyspark pandas matplotlib ipywidgets
Krok 2: Ładowanie zestawu danych
Będziemy korzystać ze zbioru danych Iris, który jest publicznie dostępny w repozytorium uczenia maszynowego UCI. Możemy załadować go bezpośrednio z adresu URL za pomocą pand.
import pandas as pd
# Load the Iris dataset from a public URL
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"
columns = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'species']
iris_df = pd.read_csv(url, names=columns)
# Display the first few rows of the dataset
iris_df.head()
Krok 3: Konfiguracja PySpark
Następnie musimy skonfigurować PySpark i przekonwertować naszą ramkę danych pand na ramkę danych PySpark.
from pyspark.sql import SparkSession
# Initialize a Spark session
spark = SparkSession.builder.appName("PartitioningExample").getOrCreate()
# Convert pandas DataFrame to PySpark DataFrame
spark_df = spark.createDataFrame(iris_df)
# Show first few rows of the PySpark DataFrame
spark_df.show(5)
Krok 4: Partycjonowanie według wielu kolumn
Celem jest podzielenie danych według dwóch kolumn: gatunek i długość_sepal. Zdefiniujmy je jako nasze kolumny partycjonujące.
# Specify the columns to partition by
partition_columns = ["species", "sepal_length"]
# Partition the data and save it as Parquet files
output_path = "output/partitioned_iris"
spark_df.write.partitionBy(partition_columns).parquet(output_path)
Krok 5: Wizualizacja danych
A teraz wyobraźmy sobie, jak działa partycjonowanie. Narysujemy rozkład sepal_length pomiędzy różnymi gatunkami, aby zrozumieć, w jaki sposób podział może nam pomóc.
import matplotlib.pyplot as plt
# Extract relevant data for plotting
iris_grouped = iris_df.groupby('species')['sepal_length'].mean().reset_index()
# Plotting
plt.bar(iris_grouped['species'], iris_grouped['sepal_length'], color=['green', 'blue', 'red'])
plt.xlabel('Species')
plt.ylabel('Average Sepal Length')
plt.title('Average Sepal Length by Species')
plt.show()
Wyjście:
Najlepsze praktyki dotyczące partycjonowania
- Mądrze wybieraj kolumny: wybierając kolumny do podziału, upewnij się, że w każdej kolumnie znajduje się stosunkowo niewiele unikalnych wartości. Wydajność może zostać zmniejszona, jeśli kolumna podzielona według ma nadmierną liczbę unikalnych wartości i powoduje powstanie dużej liczby małych plików.
- Monitoruj rozmiar partycji: celuj w partycje, które nie są ani za duże, ani za małe. W idealnym przypadku każda partycja powinna mieć rozmiar od 100 MB do 1 GB, aby zapewnić optymalną wydajność.
- Unikaj nadmiernego partycjonowania: Zbyt wiele małych plików może wynikać z nadmiernego partycjonowania, co podnosi koszty związane z obsługą tych plików w systemie rozproszonym.
Często zadawane pytania
P: Dlaczego partycjonowanie jest ważne w przypadku dużych zbiorów danych?
Odp.: Partycjonowanie zwiększa skalowalność i wydajność, dzieląc duże zbiory danych na mniejsze, łatwiejsze w zarządzaniu części.
P: Czy mogę podzielić według więcej niż dwóch kolumn?
Odp.: Oczywiście! Do partycjonowania można użyć dowolnej liczby kolumn, należy jednak unikać nadmiernego partycjonowania, ponieważ może to skutkować nieefektywnością.
P: Czy partycjonowanie jest konieczne dla wszystkich zbiorów danych?
O: Nie, partycjonowanie pomaga w przypadku dużych zbiorów danych, gdy trzeba regularnie wykonywać działania na określonych grupach danych.
Wniosek
Partycjonowanie to skuteczna metoda, która zwiększa efektywność masowego przetwarzania danych w PySpark. Ucząc się, jak partycjonować według wielu kolumn, szczególnie przy użyciu listy, możesz znacznie poprawić wydajność operacji na danych. Zachowaj ostrożność przy wyborze kolumn dzielących i powstrzymaj się od tworzenia nadmiernej liczby małych plików. W dziedzinie analityki dużych zbiorów danych wiedza o tym, jak dzielić dane, jest kluczowa niezależnie od rozmiaru zbiorów danych, z którymi masz do czynienia.