HTTP API-вызов в методе apache spark filter - PullRequest
0 голосов
/ 17 апреля 2019

У меня есть фрейм данных Spark, который мне нужно отфильтровать по условию.

Условие: В кадре данных есть столбец "keyword", и мне нужно вызвать API, передающий значение этого столбца keyword. Это должно быть сделано для всех значений столбца keyword. API отправит обратно одно число, которое мне нужно сопоставить с пороговым значением. Если оно больше, тогда нужно вернуть true, иначе false.

Я написал для этого UDF , и он выглядит как показано ниже.

    val filteredDf = df.filter(apiUdf(col("keyword_text")) === true))

    val apiUdf = udf((topic: String) => {..
     .....
     HTTP API call .. 
     parse the result ... 
     find out the number from the API resposne.. 
     and then compare it with some threshold value and return true/false

Здесь проблема в том, что я открываю и закрываю HTTP-соединение столько раз, сколько у меня есть ключевых слов .. Может кто-нибудь сказать мне, как оптимизировать это, а также, если подход UDF здесь подходит?

1 Ответ

0 голосов
/ 17 апреля 2019

Spark UDFs предназначены для работы со сложной логикой для возврата значения / с.

При распределенной обработке данных исполнители дизайна / подхода плохо обращаются к внешним URL-адресам.

  • Проблема масштабирования с размером данных и без раз открытие / закрытие соединения.
  • А также, в большинстве производственных сред узлы-исполнители не подключен к интернету.

Я бы посоветовал

  1. сохранить / собрать все столбцы ("keyword_text")
  2. для каждого ключевого слова вызовите HTTP API (не искровой udf) и получите ответ
  3. сохранить данные как some_id, keyword_text, api_result

Теперь с df1 (some_id, keyword_text, api_result)

Вы можете объединить df и f1 и фильтровать с помощью api_result.

Я не уверен, что если HTTP API принимает массовый / пакетный запрос (обычно это будет делать большинство), вы можете рассмотреть этот подход.

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