امروزه یکی از ابزارهایی که برای تحلیل دادههای بزرگ در صنعت استفاده میشه، Spark هست. Spark یک موتور پردازش داده است که bindingهایی به چند زبان، از جمله پایتون، جاوا، و اسکالا داره. همچنین در دنیای امروزه با توجه به توسعه ابزارهای تحلیل داده در زبان پایتون، انقیاد Spark به پایتون، یعنی PySpark به صورت گستردهای استفاده میشه. در این نوشته قصد دارم توصیهای درباره استفاده از PySpark بهتون بکنم که شما رو از ارتکاب اشتباههای رایج دور کنه و همچنین طول عمر کدهاتون رو افزایش بده.
برخی از فرمتهای ذخیرهسازی داده، ماننده parquet fileها، اطلاعات هر ستون از داده مثل نوعش یا توضیحی که درباره اون وجود داره رو ذخیره میکنن. برخی از فرمتها هم مانند CSV فاقد چنین اطلاعاتی هستن. وقتی که با استفاده از PySpark دادههای چنین فایلهایی رو میخونید، اگر که اطلاعات مرتبط با نوع داده هر ستون موجود باشه، PySpark این نوع رو به عنوان نوع ستون خوندهشده در قرار میده، در غیر اینصورت خودش از روی دادهها یک نوع رو استنتاج میکنه.
در اغلب مواقع، PySpark کارش رو به خوبی انجام میده و انواع استنتاج شده با داده سازگارن، ولی گاهی پیش میاد که PySpark نمیتونه چنین کاری رو انجام بده و نوعها رو به صورت اشتباه استنتاج میکنه. به عنوان مثال دادهای به شکل 15:00:00 27-12-2024 رو به شکل String ذخیره میکنه که این ممکنه در ادامه براتون مشکلساز باشه.
یک روش که به شما کمک میکنه که از افتادن در دام این چنین اشتباههایی پرهیز کنید، اینه که اسکیمای دادهتون رو صراحتا مشخص کنید. با استفاده از پیمانه pyspark.sql.types میتونید این کار رو انجام بدید. برای هر ستون از دادهتون، میتونید نام، نوع، و nullable بودن اون رو مشخص کنید. این کار به شما کمک میکنه که نوع داده ستونها رو به درستی مشخص کنید، و همچنین اگر که در ستونی از داده، مقدار nullای وجود داشته باش، با خطایی که PySpark بر میگرداند از آن مطلع شوید.
از مزایای دیگر مشخصکردن صریح اسکیما اینه که کدتون رو از تغییرات نسخه داده مصون نگه میداره. در صنعت بسته به نیازمندیهای همواره در حال تغییر، پیش میاد که اسکیمای ذخیرهسازی دادهها تغییر کنن. اگر که کد شما وابسته به اسکیمای داده خام باشه، هر بار که نسخه جدید از داده منتشر بشه، باید همه کد رو تغییر بدید و اون رو با داده جدید سازگار کنید. در صورتی که شما اسکیمای داده رو صراحتا مشخص کنید، و کدتون رو با استفاده از اسکیمای تعریف شده بنویسید، در صورت انتشار یک نسخه جدید از داده، تنها قسمتی از کد که تغییر میکند، بخش خوندن داده خام و به شکل اسکیمای تعریفشده در آوردنشه.
اگر که کدی که مینویسید، مهمون حداکثر یکی-دو روزه، میتونید به هر شکلی که خواستید بنویسیدش. ولی اگر که کد قراره که مدت زمان زیادی زنده بمونه و به دفعات در طول زمان نسبتا طولانی اجرا بشه، خیلی مهمه که بتونه خودش رو تا حدودی از معرض تغییر قرار گرفتن حفظ کنه. تعیین اسکیمای داده به صورت صریح هم یکی از روشهاییه که میتونه به زندهموندن کدتون کمک کنه! علاوه بر این، بهتون کمک میکنه که مطمئن بشید که دادههایی که در هر ستون ذخیره شدن، چه از لحاظ نوع و چه از لحاظ null بودن با ذهنیت شما سازگارن.