مقایسه عملکرد با withColumnRenamed و toDF در تغییر نام ستونهای PySpark
این مقاله تفاوتهای عملکردی بین دو روش withColumnRenamed و toDF برای تغییر نام ستونها در PySpark را بررسی میکند. روش toDF با ایجاد یک لایه تبدیل واحد در DAG اسپارک، عملکرد بهتری در مقایسه با زنجیرهای از withColumnRenamed دارد.
مقایسه دو روش تغییر نام ستون در PySpark
در محیط PySpark، تغییر نام ستونها میتواند به دو روش اصلی انجام شود: استفاده از تابع withColumnRenamed به صورت زنجیرهای یا استفاده از toDF() برای تغییر نام کلیه ستونها در یک مرحله. در نگاه اول هر دو روش نتیجه یکسانی تولید میکنند، اما در سطح Directed Acyclic Graph (DAG) اسپارک تفاوتهای اساسی وجود دارد.
withColumnRenamedبرای هر تغییر نام یک لایه projection جدید به DAG اضافه میکندtoDF()کلیه تغییر نامها را در یک مرحله واحد اعمال مینماید- اگرچه هر دو روش از نظر اجرای فیزیکی بهینه میشوند، اما تفاوت در پیچیدگی DAG بر روی عملکرد و خوانایی کد تأثیرگذار است
تأثیر بر روی DAG اسپارک
«هر عملیات در PySpark به صورت Lazy اجرا شده و یک گره به DAG اضافه میکند»
- زنجیرهای از
withColumnRenamedباعث افزایش گرههای DAG میشود toDF()تنها یک گره تبدیل به DAG اضافه میکند- این تفاوت در پایپلاینهای بزرگ با میلیونها ردیف مشهودتر است
معیارهای عملکردی
«در بنچمارک انجام شده، toDF حدود ۱۶ برابر سریعتر از withColumnRenamed عمل کرد»
- آزمایش روی دیتافریم با ۶۰۰,۰۰۰ ردیف انجام شد
withColumnRenamed: ۱۴.۴۸ ثانیهtoDF(): ۰.۸۸ ثانیه- کاهش پیچیدگی DAG باعث بهبود عملکرد میشود
برای تغییر نام حجم زیادی از ستونها، استفاده از toDF() توصیه میشود چرا که هم عملکرد بهتری دارد و هم کد تمیزتر و خواناتری تولید میکند.
