Написание data.table для Spark с помощью sparklyr эффективно - PullRequest
2 голосов
/ 03 июля 2019

Я пытаюсь загрузить большие data.table в Spark, используя sparklyr следующим образом:

copy_to(sc, obj, "name_of_object")

, где sc - это соединение Spark, а obj - мой объект. После некоторых копаний я обнаружил, что запись таблиц в Spark выполняется следующим образом (в spark_data_copy()): файл csv создается на диске с использованием сериализатора spark_serialize_csv_scala, который использует базу R write.table(). После записи файла R инструктирует Spark прочитать csv.

Я обнаружил, что это не очень эффективно для моего использования. Кажется, что R зависает, и есть только столько настроек, которые можно выполнить для части csv, написавшей задачу. Существует ли эффективный способ поместить данные, уже находящиеся в памяти R, в Spark?

1 Ответ

0 голосов
/ 03 июля 2019

Одним из решений является использование data.table's fwrite() для записи CSV-файла и импорта его с использованием spark_read_csv(). Это дает два ускорения:

  1. fwrite намного быстрее, чем write.table()
  2. По некоторым причинам, использование spark_read_csv() также намного быстрее, запустите так, что локальный экземпляр Spark будет использовать все ядра (и, возможно, есть больше различий). Для меня на 16-ядерном компьютере это действительно помогает.

Если будет дано время, я сделаю более точные измерения.

...