Nano Hash - криптовалюты, майнинг, программирование

Преобразование кадра данных Spark в кадр данных R

Я использую R в Zeppelin на работе для разработки моделей машинного обучения. Я извлекаю данные из таблиц Hive, используя %sparkr, sql(Constring, 'select * from table'), и по умолчанию он создает фрейм данных spark с 94 миллионами записей.

Однако я не могу выполнять все задачи по обработке данных R в этом Spark df, поэтому я пытаюсь преобразовать его во фрейм данных R с помощью Collect(), as.data.frame(), но я столкнулся с проблемами узла памяти/тайм-аута.

Мне было интересно, известно ли сообществу переполнения стека какой-либо другой способ преобразования Spark df в R df избегая проблем с тайм-аутом?


  • Это по определению то, что требуется для R dataframe. 09.08.2018
  • что делать, если время преобразования истекло? 09.08.2018
  • Тогда вам не следует использовать их. Вы можете скорее проверить методы gapply или dapply, которые работают с фрагментами данных распределенным образом. 09.08.2018
  • Как насчет использования пакета sparklyr, каких-либо входных данных? 09.08.2018
  • Давайте продолжим обсуждение в чате. 09.08.2018
  • Sparklyr не сильно отличается — он просто добавляет еще один уровень косвенности, притворяясь, что Spark — это база данных. 09.08.2018

Ответы:


1

Вы пытались сначала кэшировать свой искровой фрейм данных? Если вы сначала кэшируете свои данные, это может помочь ускорить сбор, поскольку данные уже находятся в ОЗУ... это может решить проблему тайм-аута. В то же время это только увеличит ваши требования к оперативной памяти. Я тоже видел эти проблемы с тайм-аутом, когда вы пытаетесь сериализовать или десериализовать определенные типы данных или просто большие объемы данных между R и Spark. Сериализация и десериализация больших наборов данных — это далеко не «пуленепробиваемая» операция с R и Spark. Более того, 94M записей может быть слишком много для вашего узла драйвера, особенно если в вашем наборе данных много измерений.

Один обходной путь, который я использовал, но не горжусь им, заключается в том, чтобы использовать spark для записи фрейма данных в виде CSV, а затем заставить R прочитать этот CSV-файл обратно в следующей строке скрипта. Как ни странно, в нескольких случаях, когда я делал это, метод записи файла и чтения файла на самом деле оказывался быстрее, чем простая операция collect. Намного быстрее.

Совет — следите за секционированием при записи CSV-файлов с помощью spark. Вы получите кучу CSV-файлов и должны будете выполнить какую-то операцию tmp<- lapply(list_of_csv_files_from_spark, function(x){read.csv(x)}) для чтения в каждом CSV-файле по отдельности, а затем, возможно, df<- do.call("rbind", tmp) ... вероятно, было бы лучше использовать fread для чтения в CSV вместо read.csv также.

Возможно, лучше спросить, какие другие задачи по обработке данных вы не можете выполнить в Spark, для которых вам нужен R?

Удачи. Я надеюсь, что это было полезно. -нейт

09.08.2018
  • ну, в моем случае я пытался использовать методы dplyr для фрейма данных искры, а Zeppelin не позволял. Итак, я подумал, что давайте преобразовать spark df в R df, возможно, это решит проблему, однако мои данные огромны, и преобразование было невозможно (по крайней мере, из приведенного выше обсуждения). Похоже, я нашел способ обойти это с помощью Пакет SparkR, в котором есть большинство методов из пакета dplyr! spark.apache.org/docs/2.3.0/api/ R/выбрать.html 09.08.2018
  • Рад, что ты смог разобраться. dplyr и SparkR, по сути, делают одно и то же... где на самом деле это просто операция SQL. SparkR просто позволяет вам делать это распределенным, распараллеленным образом... что все еще довольно круто, IMO. 10.08.2018
  • Новые материалы

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

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..