Как запустить BucketedRandomProjectionLSH на 1 млн. Функций, хранящихся в s3, с помощью pyspark? - PullRequest
0 голосов
/ 09 января 2019

У меня есть датафрейм, который выглядит так:

+--------------------++-------------
|            feature| id        |
+--------------------++-------------
|[2.23668528E8, 1....| image1   | 
|[2.23668528E8, 1....| image2   |
|[2.23668528E8, 1....| image3   |
|[2.23668528E8, 1....| image4   |
|[2.23668528E8, 1....| image5   |

Я пытаюсь найти сходство во всех парах. Эти функции в основном представляют собой простые векторы, извлеченные из модели vgg16. Количество строк составляет около 1 миллиона, и все функции хранятся в s3. Я использую pyspark для достижения этой цели. Я попробовал два подхода для этого, используя BucketedRandomProjectionLSH из ml модуля в искре.

Подход 1:

  • Скопируйте все функции из s3 на диск с драйвером.
  • Считать функции в список Python
  • Apply sc.parallelize (список функций, 200)
  • Преобразовать rdd в фрейм данных
  • Наконец, вызовите LSH на этом кадре данных, который работает нормально. (Время, затрачиваемое на вычисление подобия, составляет около 20 минут, и это здорово)

Подход 2:

  • Получить все пути к файлам из s3 в списке.
  • Распределите все пути, используя sc.parallelize (список путей к файлам), а затем вызовите функцию, которая загрузит функцию из s3 в каждом из исполнителей для каждого из путей.
  • Преобразовать rdd в датафрейм
  • Наконец, вызовите LSH на этом кадре данных. Проблема в том, что в этом случае работа продолжает терпеть неудачу. Если я вижу журналы исполнителей, я вижу только какое-то соединение с журналами s3 и выполнение сигнала SIGTERM.

Я также пытался скопировать все функции в HDFS и следовать подходу 2, но ничего не работает.

Я хочу использовать подход 2, потому что я не хочу перенести все функции в память драйвера. Я хочу использовать искривление распараллеливания для достижения этой цели. Любая помощь будет принята с благодарностью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...