4.5Kпросмотров
16 февраля 2022 г.
Score: 5.0K
#Spark #BigData #Python #PySpark Наконец-то я вернулась! 🤍
Сегодня хочу поделиться с вами обзорной информацией про PySpark - интерфейс для Apache Spark в Python. Если вы еще не знакомы со Spark как технологией, можете почитать мой предыдущий пост. PySpark позволяет писать Spark-приложения с использованием API-интерфейсов Python и предоставляет оболочку для распределенной обработки больших данных. PySpark поддерживает большинство функций Spark, таких как Spark SQL, DataFrame, Streaming, MLlib (машинное обучение) и Spark Core. PySpark взаимодействует со Spark через специальную библиотеку Py4J. Через нее программы Python обращаются к объектам Java в JVM, транслируя код Scala. Чтобы обеспечить большую совместимость со Scala, PySpark поддерживает функциональную парадигму программирования, тем самым позволяя лучше распараллеливать код. 💡Таким образом PySpark позволяет проводить параллельную обработку без необходимости использования каких-либо модулей Python для потоковой или многопроцессорной обработки. Точкой входа для создания датафрейма Spark и использования функций SQL является SparkSession, в которой определяются параметры конфигурации (название приложения, кластерный менеджер, количество выделяемых ядер и памяти). При перехода с Python на PySpark необходимо преобразовать локальный датафрейм Pandas в Spark Dataframe через Apache Arrow. 💡В целом, тем, кто работает с Pandas, не так сложно будет разобраться с PySpark, так как оба используют датафреймы и имеют схожие методы. Но есть существенное различие - в режиме выполнения. PySpark реализует lazy execution (ленивое выполнение), в то время как Pandas – eager execution (мгновенное выполнение). PySpark сохраняет всю последовательность необходимых операций и выполняет их лишь в том случае, когда данные понадобятся. Что еще важно знать про PySpark? 📍Поддерживаются такие форматы данных, как CSV, JSON, ORC, Parquet. 📍PySpark может взаимодействовать с SQL и NoSQL базами данных. 📍В PySpark возможно создание пользовательской функции (UDF, User Defined Function), аналогичной функции Python. Но тут возникает и недостаток PySpark - происходит двойное преобразование данных между приложением и UDF, так как Python чуждый язык для JVM, на которой работает Spark, и UDF выполняется вне ее. Это сказывается на скорости работы UDF. 📍PySparkSQL служит для создания датафреймов и помимо встроенных функций и типов данных поддерживает:
- GroupedData (агрегационные методы, аналог GroupBy)
- DataFrameNaFunctions (методы обработки Nan значений)
- DataFrameStatFunctions (методы для статистической обработки данных) Подводя итог, можно сказать, что PySpark - это отличная обертка для использования всего функционала Spark на Python, если вам ближе этот язык программирования. PySpark не так сложно изучить, если у вас уже есть бэкграунд с Pandas, что особенно полезно аналитикам данных, которые хотят освоить компетенции DE. Для простых и распространенных задач PySpark с учетом простоты синтаксиса Python является мощнейшим инструментом в руках любого специалиста по работе с данными. Тем не менее важно понимать указанные недостатки PySpark, особенно если вам требуется писать UDF. И если использование PySpark существенно сказывается на производительности, предпочтительнее все же выбирать Scala/Java для работы со Spark.