Примечания к исследованию Pyspark (4) Обзор RDD эластичного распределенного набора данных (Часть 1)
Примечания к исследованию Pyspark (4) Обзор RDD эластичного распределенного набора данных (Часть 1)

Каталог статей


Предисловие Эта статья в основном дает общее введение в RDD и устанавливает базовую концепцию.

Ссылки:pyspark-rdd

1. Что такое RDD — отказоустойчивый распределенный набор данных?

RDD (устойчивый распределенный набор данных) да PySpark Основной строительный блок программирования daspark, самый простой объект данных;

    Все наборы данных в его приложении daspark, включая первоначально загруженный набор данных, набор промежуточных расчетных данных и окончательный набор данных результата, являются даRDD.

    По сути, объект RDDда представляет собой коллекцию, распределенную на каждом узле и представляющую данные в программе Spark. Если взять в качестве примера Pyspark, то RDD состоит из объектов Python, распределенных на каждом узле, которые представляют собой коллекцию объектов, аналогичную списку самого Python. Разница в том, что коллекция Python хранится только в одном процессе для обработки, а RDD распределяется по каждому узлу, а это означает, что коллекция Python рассчитывается для нескольких процессов на нескольких физических серверах.

Еще одна вещь, о которой следует упомянуть здесь,Хотя можно сохранить СДР на жёсткий диск.,Но RDD в основном хранится в памяти.,Ожидается, что по крайней мере да будет хранить существование в памяти,Потому что Spark появился для поддержки машинного обучения.

Создав RDD, вы не сможете его изменить.

2. Основные возможности и преимущества PySpark RDD

    RDD,Resilient Distributed Dataset, Эластичный, распределенный набор данных,Вы можете разобрать это и проанализировать по его имени:

  • эластичность: иметьэластичность,даотказоустойчивый,То есть, если потерян узел, выполняющий задачу,Набор данныхеще можно построить。этотдапотому чтоКаждый RDD имеет свою генеалогию (DAG).,RDD можно создавать с нуля.
  • распределенный:RDDдараспределенныйиз,Данные RDD разделены как минимум на один раздел.,существующий по рабочим узлам кластера распределенный сохраняется в существующей памяти как совокупность объектов;
  • Набор данных: RDDда Зависит от Записыватькомпозицияиз Набор данных。так называемыйЗаписывать,Подобно «строке» данных в таблице.,Обычно состоит из нескольких полей. Загрузка,Единственный набор различимых данных в наборе данных,Каждый раздел RDD содержит отдельную часть.,Операцию можно выполнить самостоятельно.

Преимущества РДД заключаются в следующем:

  • обработка памяти PySpark Загрузите данные с диска и Обработка данных в памяти И сохраните данные в памяти, это да PySpark и Mapreduce(I/O Основное отличие интенсива). В процессе преобразования из существования в действие мы также можем кэшировать/сохранять в памяти. RDD повторно использовать предыдущие расчеты.
  • неизменность PySpark существовать HDFS、S3 и т. д. работают в отказоустойчивом хранилище данных, поэтому любые RDD выполнить операцию не удается, он автоматически перезагружает данные из других разделов. Кроме того, когда PySpark Приложение существует при работе в кластере PySpark Сбои в выполнении задач автоматически возобновляются определенное количество раз (в зависимости от конфигурации), что обеспечивает плавное завершение работы приложения.
  • ленивая операция PySpark Ни один существующий водитель не появляется/не встречается RDD Он оценивается при преобразовании и дасуществовать сохраняет все преобразования при обнаружении (DAG), а существующее видит первое из них. RDD Все конверсии оцениваются при срабатывании.

3. Ограничения PySpark RDD

PySpark RDD Не очень подходит для приложений, обновляющих хранилища состояний.,Например Web Система хранения приложения. Для этих приложений более эффективно использовать систему (например, базу данных), которая выполняет традиционную регистрацию обновлений и проверку данных.

Цель RDD — предоставить эффективную модель программирования для пакетного анализа и отказаться от асинхронных приложений.

4. Создайте СДРД

RDD в основном создаются двумя разными способами:

  • Распараллелить существующие коллекции;
  • Цитироватьсуществоватьво внешней системе храненияиз Набор данных(HDFS,S3 и т. д.)

При использовании pyspark в самом начале обычно вызывается следующая программа ввода:

Язык кода:javascript
копировать
from pyspark.sql import SparkSession
# создатель искрового объекта
spark = SparkSession \
		.builder \
		.appName("test") \
		.getOrCreate()
sc = spark.sparkContext

①Используйте sparkContext.parallelize() для создания RDD.

этотфункцияв драйвереизЗагрузите существующую коллекцию в параллельный RDD. середина. Это дасоздавать RDD Базовый метод, используемый, когда данные, загруженные из файла или базы данных, уже находятся в памяти. и это требует, чтобы при создании RDD Раньше все данные существовали в драйвере.

Язык кода:javascript
копировать
#Create RDD from parallelize    
data = [1,2,3,4,5,6,7,8,9,10,11,12]
Rdd = spark.sparkContext.parallelize(data)

②Справочные наборы данных во внешних системах хранения.

Spark Считать текстовый файл в RDD — Ссылки

sparkContext.textFile()

Для чтения текстовых файлов из HDFS, S3 и любой файловой системы, поддерживаемой Hadoop, этот метод принимает путь в качестве аргумента и, при необходимости, несколько разделов в качестве второго аргумента;

sparkContext.wholeTextFiles()

Считать текстовый файл в RDD(String,String) тип PairedRDD,Ключ к пути к файлу,Значение содержимого файла. Этот метод также принимает путь в качестве параметра,и, возможно, несколько разделов в качестве второго параметра.

Когда мы знаем имена нескольких файлов для чтения, если мы хотим прочитать все файлы из папки для создания RDD, просто введите все имена файлов и папку с разделителем-запятой, и на этом этапе поддерживаются оба вышеуказанных метода. Сопоставление с образцом и подстановочные знаки также принимаются.

③Создать пустой RDD

Язык кода:javascript
копировать
rdd = spark.sparkContext.emptyRDD
rdd2 = spark.sparkContext.parallelize( [ ],10)  #This creates 10 partitions

5. Распараллеливание RDD

Ссылки

Когда вы запускаете RDD, он автоматически разбивает данные на разделы в зависимости от доступности ресурсов.

getNumPartitions() - Вот этот RDD Функция, которая возвращает разделы, на которые разделен наш набор данных.

Мы также можем установить несколько разделов вручную, нам просто нужно передать несколько разделов в качестве второго параметра этим функциям:

Например

Язык кода:javascript
копировать
sparkContext.parallelize([1,2,3,4,56,7,8,9,12,3], 10)

Иногда нам может потребоваться **перераспределение**. PySpark предоставляет два способа перераспределения.

Первый:использоватьrepartition(numPartitions)откудаиметь Узел перемешивает данныеизметод,Также известно как полная перетасовка,

Метод repartition() очень затратен.,Потому что он перемешивает данные со всех узлов кластера.

второй:использоватьcoalesce(n)метод**Перетасуйте данные из самых маленьких узлов,Используется только для уменьшения количества разделов**.

Это оптимизированная или улучшенная версия функции darepartition(), которая использует слияние для уменьшения перемещения данных между разделами.

Например,Если сейчассуществоватьиметь 4 разделы, то Coalesce(2) начинается только с 2 Узлы перемещают данные.

Язык кода:javascript
копировать
#Перед выполнением:
Partition 1 : 0 1 2
Partition 2 : 3 4 5
Partition 3 : 6 7 8 9
Partition 4 : 10 11 12
Partition 5 : 13 14 15
Partition 6 : 16 17 18 19
#После выполнения:
Partition 1 : 0 1 2
Partition 2 : 3 4 5 6 7 8 9
Partition 4 : 10 11 12 
Partition 5 : 13 14 15 16 17 18 19

третий:использоватьpartitionBy(numPartitions, partiontionFunc=portable_hash)функция,

6. Работа PySpark RDD

Подробное описание можно найти в моем блоге:

Примечания к исследованию Pyspark (5) Операции RDD (1) Операции преобразования _RDD

Примечания к исследованию Pyspark (5) Операции RDD (2)_Операции действий RDD

Преобразования ):действоватьRDDи вернутьсяодин Новый РДД функция;

Действия ) :Управлять СДР, расчет триггера, и вернуться значение или выполнить вывод функция.

Самая большая разница между ними заключается в,конвертироватьдействоватьдалени , будет RDD Конвертировать/обновиться до другого,иметь в видуПока мы не позвоним да не будет выполнять расчеты перед действием.

Более подробную информацию и примеры можно найти в следующем сообщении блога.

7. Виды РДР

Помимо базового типа BaseRDD, который содержит общие свойства и функции, RDD также имеет следующие общие типы:

PairRDD: RDD, состоящий из пар ключ-значение. Например, содержимое, прочитанное с помощью упомянутого ранее метода WholeTextFiles(), сохраняется в форме пар ключ-значение.

DoubleRDD: RDD, состоящий из чисел двойной точности с плавающей запятой.

DataFrame:доизверсия называетсяSchemaRDD,пресс-группаиметьфиксированное имяитипорганизовано в столбцыизраспределенный Набор данных. DataFrame эквивалентен реляционной таблице в sparkSQL. Поэтому мы часто создаем этот DataFrame при использовании sparkSQL.

HadoopRDD:Обеспечить хранилище для чтениясуществоватьHDFSначальствоизданныеизRDD。

8. Операция перетасовки

Shuffle да PySpark используется длясуществоватьМеханизм перераспределения данных между разными исполнителями или даже между машинами.

К операциям, которые могут вызвать перемешивание, относятся:

repartitionиcoalesceждатьПеределдействовать,

groupByKeyиreduceByKeyждатьОперация агрегирования(кроме количества),

а такжеcogroupиjoinждатьПрисоединиться к операции

PySpark Shuffle это дорогая операция, потому что она включает в себя следующее

· Дисковый ввод/вывод

· Включает сериализацию и десериализацию данных.

·Сетевой ввод/вывод

Перемешать размер раздела и производительность

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

①при обращенииМеньший объем данныхчас,Обычно тасовка должна сокращаться, перегородка,

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

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

Получите правильный размер shuffle Подсчет разделов сложен и требует нескольких прогонов с разными значениями для достижения оптимизированного числа. Когда существуют PySpark Это один из ключевых атрибутов, на который следует обращать внимание при возникновении проблем с производительностью задачи.

Оглавление серии статей:

Примечания к исследованию Pyspark (1) — предисловие и содержание

①.Примечания к исследованию Pyspark (2) — Введение в развертывание искры и команду искровой отправки

②.Примечания к исследованию Pyspark (3) — SparkContext и SparkSession

③.Примечания к исследованию Pyspark (4) Обзор RDD эластичного распределенного набора данных (Часть 1)

Примечания к исследованию Pyspark (4) эластичный распределенный набор данных RDD Обзор (часть 2)

Примечания к исследованию Pyspark (5) Операции RDD (1) Операции преобразования _RDD

Примечания к исследованию Pyspark (5) Операции RDD (2)_Операции действий RDD

⑦Примечания к исследованию Pyspark (5) Операции RDD (3) Операции преобразования RDD пары ключ-значение

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