На основе попытки написания AIGC: глубокое понимание Apache Arrow
На основе попытки написания AIGC: глубокое понимание Apache Arrow

Предисловие

В нынешнюю эпоху, основанную на данных,Необходимо обмениваться большими объемами данных между различными системами и программами-приложениями. Эти данные могут поступать из разных источников,Такие как датчики, базы данных, файлы и т. д.,Иметь разные форматы, размеры и структуры, также могут отличаться операционные среды разных систем и языков программирования;,Например, операционная система, аппаратная архитектура и т. д.,Это еще больше увеличивает сложность и трудность обмена данными. Для эффективной передачи и обработки этих данных,Необходим высокопроизводительный формат обмена данными,Повысить скорость и эффективность обмена и обработки данных. Традиционно,Обмен данными обычно осуществляется в текстовом формате.,Такие как CSV, XML, JSON и т. д.,Однако у них есть такие проблемы, как низкая эффективность синтаксического анализа, большое использование дискового пространства и ограничения типов данных.,Передача и обработка крупномасштабных данных часто неэффективны. поэтому,Необходим эффективный формат обмена данными,Можно быстро переносить данные из одной системы или программы-приложения в другую.,И может поддерживать взаимодействие между разными языками программирования и операционными системами.

Apache Arrow был создан для удовлетворения этого спроса. Он обеспечивает высокопроизводительный кроссплатформенный формат обмена данными в памяти, который позволяет более эффективно обмениваться и обрабатывать данные и поддерживает несколько языков программирования, таких как C ++, Python, Java, Go. и т. д., а также предоставить ряд API и инструментов для облегчения обмена и обработки данных пользователей.

Apache Arrow определяет единый формат двоичных данных и спецификацию метаданных, поэтому программы-приложения на разных языках и в разных системах могут напрямую получать доступ к этим данным и манипулировать ими без какого-либо преобразования или перевода. В частности, Апач Формат данных Arrow использует столбчатое хранилище, в котором данные хранятся в столбцах, что делает доступ к данным более эффективным, поскольку, когда набор данных большой, метод хранения на основе строк должен сканировать всю строку для получения необходимой информации, тогда как метод хранения на основе столбцов; Метод хранения требует сканирования всей строки для получения необходимой информации. Метод хранения требует сканирования только определенных столбцов. Кроме того, многие большие наборы данных состоят из часто повторяющихся значений, таких как информация о товарах и клиентах в записях о продажах. Хранение на основе столбцов экономит место для хранения за счет сжатия идентичных значений и обеспечивает более быстрые операции агрегирования (например, вычисление средних значений, сумм и т. д.). Таким образом, хранилище на основе столбцов часто более эффективно, чем хранилище на основе строк, при работе с большими объемами многомерных данных.

Принципы архитектуры

Apache Arrow — это средний уровень для эффективной передачи данных между различными системами и языками программирования. Он состоит из структуры данных открытой памяти и набора стандартизированных интерфейсов. Апач Архитектура Arrow в основном состоит из трех частей: формат памяти、столбчатая структура данныхипротокол взаимодействия。

формат памяти

Apache Arrowизформат — это структура данных, основанная на двоичных последовательностях, которые могут представлять различные типы данных в памяти. Он использует технологию выравнивания Память, чтобы гарантировать, что данные хранятся в физически смежных блоках Память, тем самым повышая эффективность доступа к данным. формат память также поддерживает операции с нулевым копированием,Данные могут быть перенесены напрямую из одной системы в другую.,Не нужно копировать или конвертировать.

1. Модель памяти. Apache Arrow использует унифицированную модель памяти. Это означает, что библиотеки Arrow на разных языках могут совместно использовать структуры данных в памяти без дополнительного преобразования или копирования данных. Эта модель памяти разработана на основе столбчатого хранилища, в котором данные разделяются на столбцы, и каждый столбец может иметь несколько значений. Arrow также поддерживает вложенные типы данных, такие как массивы и структуры.

2. Уровень метаданных. Уровень метаданных Apache Arrow хранит информацию о данных, такую ​​как тип данных, длина данных и значения перечисления. Уровень метаданных также включает дескрипторы данных, которые включают схему, определяющую структуру набора данных и позволяющую пользователям определять метаданные для легкой интеграции Arrow с другими системами.

3. Формат сериализации. Apache Arrow использует формат файлов с отображением в памяти для сериализации данных. Этот формат позволяет обмениваться данными между разными языками и кодируется в последовательность байтов посредством процесса сериализации и десериализации. Этот формат сериализации поддерживает операции с нулевым копированием, тем самым устраняя узкое место в производительности при передаче данных между разными языками и компьютерами. Чтобы добиться передачи данных с нулевым копированием между различными системами, необходимо решить: проблему с порядком байтов, отображение памяти. , компилятор и ABI. Кроме того, Arrow также поддерживает сжатие и потоковую передачу, что позволяет Arrow эффективно обрабатывать крупномасштабные данные.

столбчатая структура данных

Apache Стрелка хранит данные в столбцах, такая столбчатая. структура данныхиз Преимущество в том, что это может сократить чтениеи При написанииизI/Oдействовать,тем самым значительно улучшая производительность обработки данных,Формат столбца имеет следующие ключевые характеристики:

1. Близость данных, подходящая для постоянного доступа (сканирование)

2. Произвольный доступ O(1) (постоянное время).

3. Поддержка SIMD и обработки векторизации.

4. Реальный доступ с нулевым копированием может быть достигнут в общей памяти без «реорганизации указателя».

Хранение по столбцам — это метод хранения данных, при котором каждое поле хранится отдельно вместо хранения всей записи построчно. Ниже приведены несколько преимуществ столбчатого хранения:

  1. Более высокая степень сжатия: Похожие значения хранятся вместе, что обеспечивает более высокую степень сжатия за счет эффективного сжатия и кодирования нескольких записей. Это означает, что для хранения того же объема данных можно использовать меньше места.
  2. Более высокая скорость запроса: Во время обработки запроса считываются только обязательные поля, а не вся запись. Это может значительно снизить накладные расходы на доступ и ввод-вывод, тем самым повышая производительность запросов. Столбчатое хранилище позволяет избежать сканирования нерелевантных полей, особенно для агрегатных запросов к большим наборам данных.
  3. Улучшенная производительность параллельной обработки: Для некоторых операций с интенсивными вычислениями, таких как операции агрегирования, данные могут быть разделены по полям, а данные в разных полях могут обрабатываться одновременно, чтобы повысить производительность параллельной обработки.
  4. Лучшая масштабируемость: Хранилище столбцов имеет лучшую масштабируемость, поскольку вы можете загружать только нужные поля вместо загрузки всей записи. Это делает его подходящим для больших наборов данных и распределенных систем.

Apache Arrow поддерживает следующие типы данных:

  1. Null: Тип данных, не содержащий значения.
  2. Boolean: Тип данных, представляющий логическое значение.
  3. Integers: Типы данных, представляющие целые числа, включая целые числа со знаком и без знака, а также целочисленные типы с разными цифрами (например, 8-битные, 16-битные, 32-битные и 64-битные).
  4. Floating-Point Numbers: Тип данных, представляющий числа с плавающей запятой, включая числа с плавающей запятой одинарной точности (32 бита) и числа с плавающей запятой двойной точности (64 бита).
  5. Decimal: Тип данных, представляющий число фиксированной точности.
  6. Date and Time: Типы данных, представляющие дату и время, включая даты, время, метки времени и интервалы.
  7. Strings: Тип данных, представляющий текстовую строку.
  8. Binary: Тип данных, представляющий двоичные данные.
  9. Lists: Тип данных, содержащий упорядоченную коллекцию любого количества элементов.
  10. Structs: Сложный тип данных, содержащий несколько полей.
  11. Unions: Тип данных, который может хранить значения разных типов.
  12. Dictionary: Тип структуры словаря, который использует значения перечисления для представления набора последовательных целых чисел.

протокол взаимодействия

Apache Arrow определяет набор стандартизированных интерфейсов и протоколов для передачи данных в формате Arrow между различными системами и языками программирования. Эти интерфейсы и протоколы позволяют использовать различные приложения и платформы, протоколы Основные характеристики взаимодействия следующие:

1. Протокол связи Apache Arrow использует стандартный двоичный формат для сериализации и десериализации данных. Это означает, что данные Arrow можно легко переносить и анализировать между различными системами и языками программирования. также,Поскольку двоичный формат очень компактен,Таким образом, большие объемы данных могут передаваться по сети без больших накладных расходов.

2. Метаданные: протокол взаимодействия Apache Arrow также определяет некоторые метаданные.,Правильно интерпретировать структуры и типы данных при совместном использовании данных между различными системами и языками программирования. Например,Данные стрелки содержат информацию о ее типе, длине и значении.,Чтобы получатель мог правильно проанализировать данные.

3. Потоковые протоколы: Apache Arrowпротокол взаимодействия Используйте потокоориентированныйизпротокол,Чтобы более эффективно использовать Память при работе с большими объемами данных. Это означает, что можно использовать небольшие потоки данных.,Вместо того, чтобы загружать все данные в Память сразу. Это делает обработку больших наборов данных более эффективной.,И он может избежать коллапса, когда Память недостаточно.

4. Масштабируемость: Apache Arrowпротокол взаимодействиямасштабируемыйиз,Это означает, что можно легко добавлять новые типы данных и метаданные. Это делает его идеальным для обработки и анализа больших данных, машинного обучения и искусственного интеллекта, распределенных вычислений, а данные облачных вычислений можно легко передавать между различными узлами и облачными сервисами;,Это делает распределенные вычисления и облачные вычисления более эффективными и гибкими.

приложение

Давайте подробнее рассмотрим, как Apache Arrow реализован на разных языках и платформах:

  • C ++:Apache ArrowизC++Реализацияссылкавыполнить,и служить основой для других языковых привязок. Он предоставляет набор библиотек и заголовочных файлов.,Может использоваться для создания、Манипулирование и сериализация структур данных Arrow. Библиотека C++ также включает поддержку выделения и управления Память.、Параллельное выполнение и возможность интеграции с другими системами, такими как распределенные файловые системы.
  • Java:Apache Java-реализация Arrow предоставляет набор классов и интерфейсов, отражающих C. ++ API. Он включает поддержку типов стрелок, буферов и управления Память. Реализация Java также включает поддержку интеграции с другими системами на основе Java, такими как Hadoop и Spark.
  • Python:Apache Реализация Arrow на Python построена на C. Помимо библиотеки ++ предоставляется набор модулей, которые позволяют программам Python создавать, манипулировать и сериализовать структуры данных Arrow. Реализация Python также включает поддержку массивов NumPy, фреймов данных Pandas и интеграцию с другими системами, такими как PySpark.
  • R:Apache Реализация R Arrow предоставляет набор функций и пакетов, которые позволяют программам R взаимодействовать с другими языками, используя структуры данных Arrow. Он включает поддержку типов стрелок, фреймов данных и интеграцию с другими системами на основе R, такими как dplyr и ggplot2.
  • JavaScript:Apache Реализация JavaScript Arrow предоставляет набор классов и функций, которые позволяют программам JavaScript создавать, манипулировать и сериализовать структуры данных Arrow. Он включает поддержку типизированных массивов, объектов ArrayBuffer и интеграцию с другими системами на основе JavaScript, такими как Node.js и React.

Реализация Apache Arrow на языке Rust требует следующих шагов:

1. Выберите пакеты Arrow для языка Rust: в Rust имеется множество пакетов Arrow на выбор, таких как стрелка-rs, datafusion, ballista и т. д.

2. Определить формат Arrow. Определите формат структуры данных, совместимый с платформой Arrow. Эти форматы обычно представлены структурами в Rust, такими как StructArray и PrimitiveArray. Эти структуры данных могут быть автоматически сгенерированы с помощью возможностей метапрограммирования Rust.

3. Внедрить методы сериализации и десериализации. Структуры данных Arrow должны иметь возможность сериализации и десериализации для передачи данных между различными компьютерами и процессами. В Rust для достижения этой функциональности можно использовать различные библиотеки сериализации, такие как serde или bincode.

5. Реализуйте управление памятью: Rust обеспечивает безопасное и эффективное управление памятью. В Arrow управление памятью очень важно, поскольку данные должны быть максимально разделены между разными компьютерами и процессами. Rust может использовать свои системы владения и срока службы, чтобы гарантировать правильное выделение и освобождение памяти.

6. Интеграция в экосистему Arrow: как только структура данных Arrow будет реализована в Rust, ее необходимо интегрировать во всю экосистему Arrow. Это означает, что ему необходимо взаимодействовать с другими языками и платформами, поддерживающими Arrow, для обеспечения межъязыкового и межплатформенного обмена данными.

Вот несколько вариантов использования и примеров Apache Arrow в распределенных вычислениях, машинном обучении и визуализации данных:

1. Распределенные вычисления. Apache Arrow обеспечивает эффективные функции обмена данными в памяти, позволяя различным механизмам обработки данных более эффективно взаимодействовать. Например, в экосистеме Hadoop и Spark, и Flink широко используют Arrow для реализации обмена данными. Это позволяет различным вычислительным механизмам использовать одни и те же структуры данных, избегая дорогостоящего преобразования данных между разными механизмами. Кроме того, Arrow также поддерживает ускорение графических процессоров, что позволяет использовать графические процессоры для ускорения вычислений в распределенных средах.

2. Машинное обучение. Машинное обучение требует обработки больших объемов данных, и Arrow может обеспечить эффективный обмен данными, позволяя быстрее обучать и настраивать модели. Например, библиотеки Python, такие как Dask и Ray, используют Arrow для реализации эффективного распределенного машинного обучения. Кроме того, Arrow также интегрирован с платформами глубокого обучения, такими как TensorFlow и PyTorch, что обеспечивает эффективный обмен данными и функции управления памятью при использовании этих платформ.

3. Визуализация данных. Apache Arrow может помочь инструментам визуализации данных более эффективно обрабатывать и отображать данные. Например, Apache Superset — это веб-инструмент визуализации данных, который поддерживает Arrow в качестве внутреннего формата данных, что позволяет быстрее загружать и обрабатывать большие объемы данных. Кроме того, Arrow интегрируется с популярными библиотеками Python, такими как Pandas, что может помочь пользователям быстрее читать и работать с большими наборами данных.

4. Поддержка ускорения графического процессора. Apache Arrow может использовать преимущества параллельных вычислений на графическом процессоре для увеличения скорости обработки данных. В частности, Arrow можно использовать с CUDA и OpenCL, популярными средами программирования графических процессоров. Использование ускорения графического процессора позволяет Arrow быстрее выполнять различные задачи, такие как анализ данных, машинное обучение и рендеринг графики. Для вычислений с крупномасштабными наборами данных сочетание Arrow и графического процессора может значительно повысить производительность и обеспечить эффективный способ ускорения обработки данных, а также снижения нагрузки на процессор.

Сравнение с другими форматами

Apache Arrow — это формат структуры данных в памяти, используемый для эффективного обмена данными между различными платформами и языками программирования. Он разработан, чтобы быть быстрым, эффективным и независимым от языка программирования. Вот сравнение Apache Arrow с другими популярными форматами обмена данными:

Parquet

Parquet — это столбчатый формат хранения, широко используемый в экосистеме Hadoop. Он оптимизирован для крупномасштабной обработки данных и может обрабатывать сложные типы данных. Parquet особенно подходит для пакетной обработки больших данных, например, для машинного обучения и аналитических задач. К преимуществам Parquet относятся высокая производительность, сжатие и поддержка вложенных данных. Но по сравнению со Arrow скорость записи у него медленнее, а размеры файлов обычно больше.

ORC

ORC (Optimized Row Columnar) — еще один формат столбцового хранения, используемый в экосистеме Hadoop. Он направлен на улучшение некоторых ограничений Parquet, таких как производительность запросов и сжатие. ORC особенно подходит для интерактивных запросов к большим наборам данных. Преимущества ORC включают высокую производительность, сжатие и поддержку передачи предикатов. Однако чтение и запись могут занять больше времени по сравнению со Arrow, и не все языки программирования предоставляют для этого встроенную поддержку.

Avro

Avro — это формат сериализации данных на основе строк, используемый для эффективного обмена данными между системами. Он особенно подходит для потоковой обработки данных, такой как агрегирование журналов и обработка событий. Avro поддерживает эволюцию схем и использует JSON для определения схем, что упрощает использование. Сильные стороны Avro включают высокую производительность, компактность и возможности эволюции схемы. Однако ему не хватает возможностей столбчатого хранения, таких как Arrow, которые необходимы для эффективных аналитических запросов.

Protocol Buffers

Протокольные буферы — это формат двоичной сериализации, используемый для эффективного обмена данными между системами. Он особенно подходит для сетевого общения и может использоваться на различных языках программирования. Протокол Buffers поддерживает эволюцию схемы и может генерировать код для разных языков программирования, что упрощает его использование. Преимущества протокольных буферов включают высокую производительность, компактность и межъязыковую поддержку. Однако, как и Avro, он не имеет возможностей столбчатого хранения, таких как Arrow, которые необходимы для эффективных аналитических запросов.

Подвести итог

В этой статье рассматривается важность высокопроизводительных форматов обмена данными в современной экосистеме данных. В нем объясняется, что традиционные форматы обмена данными, такие как CSV и JSON, имеют ограничения по производительности и гибкости при обработке больших наборов данных. Чтобы решить эту проблему, Apache Arrow был представлен как проект с открытым исходным кодом, который предоставляет межъязыковую платформу разработки данных в памяти. Он предназначен для обеспечения эффективного обмена данными между различными системами и языками программирования, не требующими сериализации и десериализации.

Основные положения этой статьи заключаются в следующем:

  • Традиционные форматы обмена данными, такие как CSV и JSON, имеют ограничения в производительности и гибкости при обработке больших наборов данных.
  • Apache Arrow был представлен как проект с открытым исходным кодом, обеспечивающий межъязыковую платформу разработки данных Память.
  • Apache Arrow имеет ряд преимуществ, среди которых эффективный обмен данными между различными системами и языками программирования без необходимости сериализации и десериализации.
  • В современной экосистеме данных Apache Arrow становится все более популярным благодаря своей высокой производительности и гибкости.
  • Apache Arrow поддерживает несколько языков программирования, включая Python, Java, C++ и т. д.

Подводя итог, можно сказать, что Apache Arrow является важным инструментом в современной экосистеме данных, и его распространение, вероятно, будет расти в будущем. Его способность обеспечивать высокопроизводительный обмен данными между различными системами и языками программирования делает его ценным активом для всех, кто работает с большими наборами данных.

Статья написана на основе ChatGBT3.5, и я нашел некоторые недостатки: 1. Нет источника 2. Есть ошибки 3. Слишком много повторяющихся описаний, и их нужно дорабатывать самостоятельно и т.д. но сенсорная эффективность была значительно улучшена. В будущем я продолжу писать на основе AIGC. Только если я смогу адаптироваться к времени и использовать инструменты для самосовершенствования, у меня будет возможность написать более 6 тысяч слов за один час;

ссылка

【1】Формат столбца стрелки

【2】Проектная документация

【3】Apache Arrow GitHub repository

【4】Introduction to Apache Arrow

【5】Apache Arrow on Wikipedia

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose