Поскольку курсы по Apache Spark нужны не только разработчикам распределенных приложений, но и аналитикам больших данных с дата-инженерами, сегодня мы рассмотрим, какие средства этого фреймворка позволяют выполнять очистку данных и повышать их качество. Читайте далее, что такое Cleanframes в Spark SQL, чем полезна эта библиотека и каковы ее ограничения.
Apache Spark и Data Quality: как повысить качество данных для аналитики Big Data
Мы уже писали, что качество данных (Data Quality) играет важнейшую роль в аналитике Big Data. Поэтому очистка данных (Data cleansing) выполняется не только при подготовке датасета к моделированию с использованием алгоритмов машинного обучения (Machine Learning). Выявление и исправление ошибок, опечаток и прочих несоответствий данных с целью повышения их качества необходимо для применения любых методов анализа, в т.ч. с помощью стандартных SQL-запросов [1].
Из комплексных фреймворков улучшения Data Quality для Apache Spark можно отметить Optimus – open-source платформу для предварительной обработки, очистки и исследовательского анализа данных. Optimus включает несколько инструментов обработки Big Data, предлагая простую, быструю параллельную и масштабируемую очистку данных, их исследование и визуализацию, а также создание моделей Machine Learning [2].
Однако, если в вашем случае для аналитики больших данных с помощью Apache Spark нет необходимости в машинном обучении и требуется инструмент попроще, стоит обратить внимание на библиотеку Cleanframes. Этот небольшой модуль для Spark SQL предоставляет типовой класс для очистки данных, делая ее автоматизированной и удобной за счет парадигмы обобщённого программирование (generic programming) [3], суть которой в таком описании данных и алгоритмов, чтобы его можно применять к различным типам данных, не меняя само это описание [4]. Как это устроено, мы рассмотрим далее.
Что такое Cleanframes и при чем здесь Spark SQL
Spark-библиотека Cleanframes безопасно разрешает преобразования, связанные с типом, во время компиляции. Библиотека поставляется с общими базовыми преобразованиями и может быть расширена с помощью пользовательских. Поскольку весь код генерируется компилятором, нет потери производительности. Скачать библиотеку и посмотреть ее техническое описание можно на GitHub [3].
Cleanframes предоставляет метод clean(), который расширяет код за счет неявных разрешений на основе элементов класса case. Компилятор Scala применяет определенный метод к соответствующему типу элемента. Cleanframes поставляется с предопределенными реализациями, которые доступны путем простого импорта библиотеки [5]:
import cleanframes.syntax._
import cleanframes.instances.all._
После импорта библиотеки можно применить к датафрейму (Dataframe, одна из основных структур данных в Apache Spark) Example метод clean(): frame.clean[Example].
Поскольку преобразования используют пакет функций Spark SQL, они удобны для оптимизатора структурированных запросов Catalyst, о котором мы рассказывали здесь. Таким образом, очевидными достоинствами библиотеки Cleanframes являются следующие [5]:
- шаблон преобразований выполняется компилятором;
- общие преобразования проекта могут быть определены в одном месте и повторно использованы;
- нет дополнительных накладных расходов по сравнению разработкой кода «вручную»;
- изменения в case-классах автоматически отражаются и применяются в преобразованиях во время компиляции.
Обратной стороной этих преимуществ являются следующие ограничения, которые могут рассматриваться как недостатки [5]:
- неявные преобразования, скрытые от разработчика;
- в основном, подходит только для простых типов данных, т.к. как и любая Scala-библиотека, Cleanframes, в отличие от Java-аналогов, основана не на API, а типизации классов. Это обеспечивает безопасность кода во время компиляции и снижает накладные расходы на вычисления.
Впрочем, подход неявного преобразования типов данных предоставляет разработчику Big Data больше свободы, позволяя [6]:
- переопределить пользовательские преобразования;
- добавить поддержку новых типов
- определить преобразование с помощью пользовательских функций Spark (UDF, User Defined Functions);
- преобразовать вложенные классы case;
- обрабатывать класс case с одинаковыми типами.
Подробные примеры преобразования данных с использованием Spark SQL библиотеки Cleanframes приведены в источниках [5, 6]. Завтра мы продолжим разговор про обучение Apache Spark для разработчиков распределенных приложений и рассмотрим проблему утечки памяти при работе с этим фреймворком.
А другие практические особенности разработки распределенных приложений и применения Apache Spark для аналитики больших данных в проектах цифровизации частного бизнеса, а также государственных и муниципальных предприятий, вы узнаете на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:
Источники
- https://en.wikipedia.org/wiki/Data_cleansing
- https://hi-optimus.com/
- https://github.com/funkyminds/cleanframes
- https://en.wikipedia.org/wiki/Generic_programming
- https://medium.com/@dawid.rutowicz/cleanframes-data-cleansing-library-for-apache-spark-eaae526ee958
- https://medium.com/@dawid.rutowicz/cleanframes-data-cleansing-library-for-apache-spark-part-2-b59685fbef8a