Arhn - архитектура программирования

Разделить RDD на несколько RDD на основе значения, не выполняя `collect()` и `filter()`

Я хочу разделить RDD на несколько RDD на основе значения в строке. Значения в строках заранее известны и фиксированы по своей природе.

например

source_rdd = sc.parallelize([('a',1),('a',2),('a',3),('b',4),('b',5),('b',6)])

следует разделить на два RDD, один из которых содержит только a, а другой — только b в качестве ключей.

  1. Я попробовал метод groupByKey и смог успешно выполнить его после выполнения операции collect() над сгруппированным RDD, которую я не могу выполнить в рабочей среде из-за нехватки памяти.
a_rdd, b_rdd = source_rdd.keyBy(lambda row: row[0]).groupByKey().collect()
  1. Текущая реализация заключается в применении нескольких операций фильтрации для получения каждого RDD.
a_rdd = source_rdd.filter(lambda row: row[0] == 'a')
b_rdd = source_rdd.filter(lambda row: row[0] == 'b')

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

Использование: эти RDD будут преобразованы в разные кадры данных (по одному для каждого ключа), каждый с другой схемой и сохранен в S3 в качестве вывода.

Примечание. Я бы предпочел pyspark реализацию. Я прочитал много ответов и блогов о переполнении стека и так и не смог найти, что еще работает для меня.

Я уже видел вопрос, помеченный как дубликат, о котором я уже упоминал в своем вопросе. Я задал этот вопрос, так как предоставленное решение кажется не самым оптимизированным и ему уже 3 года.



Ответы:


1

Вы также можете использовать toDF. Кроме того, a_rdd и b_rdd не являются rdd в вашем коде, поскольку они собраны!

df = source_rdd.keyBy(lambda row: row[0]).groupByKey()
a_rdd = df.filter(lambda row: row[0] == 'a')
b_rdd = df.filter(lambda row: row[0] == 'b')
26.11.2018
  • Этот метод по-прежнему должен сканировать весь DataFrame каждый раз, когда требуется новое условие, которого я хочу избежать. 26.11.2018
  • @SumitKumar Если вам не нужны кадры данных, используйте фильтр напрямую через rdd (ответ обновлен). 26.11.2018
  • Теперь это то же самое, что и моя реализация, которую я хочу оптимизировать, если это возможно. Подробности присутствуют в моем теле вопроса 26.11.2018
  • @SumitKumar Нет. это не то же самое. Вы собираете это! но я нет. Непосредственно применяемый фильтр поверх rdd. 26.11.2018
  • сбор - это одна из методологий, я уже использую вторую методологию, такую ​​​​же, как ваша, которая не использует никаких collect или groupBy 26.11.2018
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..