Рекомендации по программному обеспечению, библиотекам или фреймворкам для обработки больших CSV файлов с дельтой

Вопрос или проблема

В настоящее время я исследую, какие решения могут быстро и эффективно сравнивать и производить дельту из CSV-файлов.

Я работаю с данными, которые выводятся из Sybase ASE. Эти файлы содержат полные таблицы и выводятся ежедневно. В одной таблице в настоящее время может быть до 80 миллионов записей, а размер CSV-файлов достигает 30 ГБ.

Мне нужно сравнить эти файлы с одного дня на другой, чтобы получить дельту, которая идентифицирует новые и обновленные записи (в настоящее время я игнорирую удаления). Это сравнение может осуществляться между последовательными файлами данных или последним файлом данных и словарём или списком. В данный момент я делаю это в SQL Server (с использованием кастомной хранимой процедуры), но мы хотели бы перейти на что-то, кроме стека Microsoft.

В конечном итоге мы будем создавать файлы Parquet из дельт.

Сначала я рассматривал возможность использования другой СУБД, такой как PostgreSQL или даже SQLite (это просто мысль!), но открыт для любых других предложений. Я думал о том, чтобы использовать некоторые big data фреймворки, такие как Spark, или даже Python и PANDA, но не уверен, являются ли они лучшими инструментами для этой работы.

На данном этапе есть явное предпочтение использовать что-то с открытым исходным кодом, но должно быть возможно запускать на месте.

Есть ли у кого-нибудь предложения, что может подойти?

Спасибо

Языки программирования, которые могут быть использованы для обработки больших файлов, следующие:

  1. Обычные высокоуровневые языки программирования, такие как Java, C/C++, C#, Basic и т.д.
  2. Данные файла импортируются в базу данных и обрабатываются с помощью SQL
  3. Python
  4. esProc SPL

В качестве примера текстового файла, в этой статье представлены характеристики вышеупомянутых методов для расчета больших файлов.

Вы можете попробовать Acho Studio, он работает довольно хорошо с большими CSV-файлами.

Ответ или решение

Для выполнения задачи по сравнению и созданию дельт из больших CSV файлов, поступающих из Sybase ASE, существует ряд подходящих программных инструментов и технологий. Ниже предлагаю несколько рекомендаций, учитывая ваши требования — производительность, возможность работы с открытым исходным кодом и выполнение обработки на местном сервере.

1. Apache Spark

Apache Spark — это мощный фреймворк для обработки больших данных, который отлично подходит для работы с большими CSV файлами. Spark использует разделение данных и алгоритмы распределенной обработки, что обеспечивает быструю обработку даже огромных массивов данных. Вы можете использовать PySpark (Python API для Spark) для обработки данных и создания дельт.

  • Преимущества:

    • Высокая производительность на больших наборах данных.
    • Возможность работы с данными в реальном времени и пакетной обработкой.
    • Поддержка различных форматов, включая Parquet.
  • Недостатки:

    • Требует конфигурации кластера Spark для полной оптимизации.

2. Dask

Dask — это библиотека Python, позволяющая обрабатывать большие объемы данных, не загружая их полностью в память. Dask работает аналогично Pandas, но распределяет задачи для параллельной обработки данных.

  • Преимущества:

    • Простой в использовании и гибкий.
    • Имеет интерфейс, аналогичный Pandas.
  • Недостатки:

    • Зависит от памяти; в некоторых случаях может потребоваться больше ресурсов.

3. Pandas с оптимизацией

Если вы решите использовать Pandas, то с учетом того, что данные большие, рекомендую использовать chunking (разбиение данных на части) для обработки файлов по частям. Сначала загрузите часть файла в память, выполните сравнение, затем переходите к следующей части.

  • Преимущества:

    • Широкая поддержка и большое сообщество.
    • Легко интегрируется с другими библиотеками Python.
  • Недостатки:

    • Может быть медленным при работе с действительно огромными наборами данных.

4. PostgreSQL или SQLAlchemy

Вы упомянули возможность миграции на PostgreSQL. Вы можете импортировать данные в PostgreSQL и затем использовать SQL-запросы для выполнения дельта-сравнения. В сочетании с SQLAlchemy вы получите мощный инструмент для обработки данных с помощью Python.

  • Преимущества:

    • Поддерживает большие объемы данных и имеет надежную систему транзакций.
    • Легко интегрируется с другими инструментами обработки данных.
  • Недостатки:

    • Требует настройки и администрирования базы данных.

5. Acho Studio

Вы также упомянули Acho Studio, который предназначен для обработки больших CSV файлов. Если он соответствует вашим требованиям к производительности, это может быть отличным вариантом.

  • Преимущества:

    • Простота использования для аналитиков и разработчиков.
    • Специализированный инструмент для работы с CSV.
  • Недостатки:

    • Возможно, потребует дополнительных исследований для полной интеграции в ваш стек.

Заключение

Учитывая все вышесказанное, вам стоит внимательно оценить возможности Apache Spark и Dask, так как они обеспечивают необходимую масштабируемость и производительность для работы с большими объемами данных. Если предпочитаете SQL-подход, PostgreSQL будет хорошим выбором. Выбор зависит от ваших предпочтений в языке программирования и необходимой производительности.

Если у вас есть дополнительные вопросы или нужна помощь с реализацией, не стесняйтесь обращаться!

Оцените материал
Добавить комментарий

Капча загружается...