پارتیشن بندی داده ها در PySpark
موسسه پایاپروژه به عنوان متصدی انجام پروژه های پایتون وظیفه ی خود می داند که در راستای آموزش نرم افزار پایتون گام های موثری را بردارد. با توجه به اینکه یک دوره آموزشی پایتون مستلزم تمرین و تلاش بسیار است. اما این موسسه تلاش می کند سهم کوچکی در جهت یادگیری پارتیشن بندی داده ها در PySpark داشته باشد.

در این مقاله قصد داریم پارتیشن بندی داده ها را با استفاده از PySpark در پایتون یاد بگیریم .
در PySpark، پارتیشن بندی داده به فرآیند تقسیم یک مجموعه داده بزرگ به تکه ها یا پارتیشن های کوچکتر اشاره دارد که می توانند همزمان پردازش شوند. این یکی از جنبههای مهم محاسبات توزیعشده است، زیرا به مجموعه دادههای بزرگ اجازه میدهد تا با تقسیم حجم کار بین چندین ماشین یا پردازشگر، کارآمدتر پردازش شوند.
مزایای پارتیشن بندی داده ها در این آموزش پایتون:
- عملکرد بهبود یافته: با تقسیم داده ها به پارتیشن های کوچکتر، می توان آن ها را به صورت موازی در چندین ماشین پردازش کرد که منجر به زمان پردازش سریع تر و بهبود عملکرد می شود.
- مقیاس پذیری: پارتیشن بندی امکان مقیاس پذیری افقی را فراهم می کند، به این معنی که با افزایش حجم داده، ماشین های بیشتری را می توان به خوشه اضافه کرد تا بار افزایش یافته را مدیریت کنند، بدون اینکه نیازی به ایجاد تغییرات در کد پردازش داده ها باشد.
- بهبود تحمل خطا: پارتیشن بندی همچنین اجازه می دهد تا داده ها در چندین ماشین توزیع شود، که می تواند به جلوگیری از از دست رفتن داده ها در صورت خرابی یک دستگاه کمک کند.
- سازماندهی داده ها: پارتیشن بندی اجازه می دهد تا داده ها به روشی معنادارتر سازماندهی شوند، مانند دوره زمانی یا موقعیت جغرافیایی، که می تواند تجزیه و تحلیل و جستجوی داده ها را آسان تر کند.
در این مقاله روش های مختلف برای انجام پارتیشن داده ها را مشاهده خواهیم کرد
روش های پارتیشن بندی داده ها در PySpark
- پارتیشن بندی هش
- پارتیشن بندی محدوده
- استفاده از partitionBy
استفاده از پارتیشن بندی هش در پایتون
این روش پارتیشن بندی پیش فرض در PySpark است. با اختصاص یک مقدار هش منحصر به فرد به هر رکورد بر اساس یک ستون مشخص و سپس قرار دادن رکورد در پارتیشن مربوطه کار می کند.
این تضمین می کند که رکوردهایی با مقدار یکسان برای ستون مشخص شده در همان پارتیشن قرار می گیرند. پارتیشن بندی هش در پایتون روشی برای تقسیم یک مجموعه داده به پارتیشن ها بر اساس مقادیر هش ستون های مشخص شده است.
مراحل پیاده سازی پارتیشن بندی هش در پایتون:
- مرحله 1: ابتدا تمام کتابخانه های لازم را وارد می کنیم و یک DataFrame در پایتون نمونه با سه ستون شناسه، نام و سن ایجاد می کنیم .
- مرحله 2: از تابع repartition برای انجام پارتیشن بندی هش در DataFrame بر اساس ستون id استفاده کنید. مشخص می کنیم که می خواهیم چهار پارتیشن بسازیم.
- مرحله 3: ما میتوانیم پارتیشنبندی را با استفاده از روش rdd برای دسترسی به RDD زیرین و سپس فراخوانی متد glom تأیید کنیم، که آرایهای از تمام عناصر هر پارتیشن را برمیگرداند.
پروژه پایتون در این آموزش:
Import required modules#
from pyspark.sql import SparkSession
Create a SparkSession #
\spark = SparkSession.builder.appName(“hash
()partitioning”).getOrCreate
Create a sample DataFrame#
])df = spark.createDataFrame

Print the DataFrame#
()df.show
Perform hash partitioning on the #
DataFrame based on the “id” column#
df = df.repartition(4, “id”)
Print the elements in each partition#
print(df.rdd.glom().collect())
خروجی:
در خروجی زیر می توانیم فریم داده ای را ببینیم که قرار است پارتیشن را در پایتون روی آن اعمال کنیم و در زیر آن فریم داده یک آرایه تو در تو دیده می شود که حاوی داده های پارتیشن بندی شده است.
+—+——-+—+
| id| name|age|
+—+——-+—+

+—+——-+—+
,[[Row(id=2, name=’Bob’, age=30), Row(id=4, name=’Dave’, age=40),
,[Row(id=5, name=’Eve’, age=45)]
, [Row(id=1, name=’Alice’, age=25), Row(id=6, name=’Frank’, age=50)]
, []
[ [Row(id=3, name=’Charlie’, age=35)]
استفاده از پارتیشن بندی Range در پایتون
این روش شامل تقسیم داده ها در این آموزش پایتون به پارتیشن ها بر اساس محدوده ای از مقادیر برای یک ستون مشخص است. برای مثال، میتوانیم یک مجموعه داده را بر اساس محدودهای از تاریخها تقسیم کنیم، که هر پارتیشن حاوی رکوردهایی از یک دوره زمانی خاص باشد. در این روش از تابع ()repartitionByRange برای انجام پارتیشن بندی محدوده در DataFrame بر اساس ستون age استفاده می کنیم.
from pyspark.sql import SparkSession
Create a SparkSession#
\spark = SparkSession.builder.appName(“range
() partitioning”).getOrCreate_
Create a sample DataFrame#
])df = spark.createDataFrame

Perform range partitioning on the #
DataFrame based on the “age” column#
df = df.repartitionByRange(3, “age”)
Print the elements in each partition#
print(df.rdd.glom().collect())
خروجی:
در خروجی زیر می بینیم که قاب داده به سه قسمت تقسیم شده است که در تابع ()repartitionByRangeمشخص شده است.
,[Row(id=1, name=’Alice’, age=25), Row(id=2, name=’Bob’, age=30)]]
, ‘Row(id=3, name=’Charlie’, age=35), Row(id=4, name=’Dave]
,[(age=40
[[Row(id=5, name=’Eve’, age=45), Row(id=6, name=’Frank’, age=50)]
استفاده از روش()partitionBy در پایتون
متد ()partitionBy در PySpark برای تقسیم یک DataFrame به پارتیشنهای کوچکتر و قابل مدیریتتر بر اساس مقادیر یک یا چند ستون استفاده میشود. این متد یک یا چند نام ستون را به عنوان آرگومان می گیرد و یک DataFrame در پایتون جدید را برمی گرداند که بر اساس مقادیر موجود در آن ستون ها پارتیشن بندی شده است.
در این، ما از مجموعه دادههای کریکت استفاده میکنیم که میتوان آن را از این لینک دانلود کرد Cricket_data_set_odi.csv . بیایید مراحل پارتیشن بندی داده ها را با استفاده از تابع ()partitionBy ببینیم .
مرحله 1: ماژول های مورد نیاز را وارد کنید و فایل CSV را بخوانید و سپس طرح آن را چاپ کنید.
importing module#
import pyspark
from pyspark.sql import SparkSession
from pyspark.context import SparkContext
creating sparksession and giving an app name#
()spark = SparkSession.builder.appName(‘sparkdf’).getOrCreate
create DataFrame#
(df=spark.read.option
header”,True).csv(“Cricket_data_set_odi.csv”)”
Display schema#
()df.printSchema
خروجی:

- مرحله 2: در این مرحله از دو ستون “تیم” و “تخصص” استفاده می کنیم. تمام پارتیشنهای مبتنی بر تیمها و تخصص آنها در پوشه Team-Speciality با استفاده از تابع ()option ذخیره میشوند و پارتیشن با استفاده از تابع ()partitionByانجام میشود.
From above DataFrame, we will be using#
Team and Speciality as a partition key#
.for our examples below#
()partitionBy#
\df.write.option(“header”, True)
\partitionBy(“Team”, “Speciality”) .
\mode(“overwrite”) .
csv(“Team-Speciality”).
خروجی:
در این خروجی می توانیم نمای کلی پوشه های پارتیشن را مشاهده کنیم.

نتیجه :
توجه به این نکته ضروری است که پارتیشن بندی داده ها می تواند تأثیر قابل توجهی بر عملکرد برنامه PySpark داشته باشد. پارتیشن بندی مناسب در پایتون می تواند سرعت و کارایی کد را تا حد زیادی بهبود بخشد، در حالی که پارتیشن بندی نامناسب می تواند منجر به عملکرد ضعیف و استفاده ناکارآمد از منابع شود.
