rdd.mapPartitions для возврата логического значения из udf в Spark Scala - PullRequest
0 голосов
/ 28 марта 2019

Я использую Scala 2.11 с Spark 2.1

У меня есть MutableList [String], определенный как переменная objectKeys

Я пытаюсь использовать Spark для распараллеливания следующим образом:

val numPartitioning = 10
val rdd = sc.parallelize(objectKeys, numPartitioning);
val x = rdd.mapPartitions(read_files_from_list(objectKeys))


def read_files_from_list(keys:MutableList[String]): Boolean = {
  // my logic to iterate over keys
  if success
     return true;
  else 
     return false;
}

Однако я получаю сообщение об ошибке несоответствие типов; Найдено: Требуется логическое значение: Итератор [String] ⇒ Итератор [?] В приложении произошла ошибка с аргументами по умолчанию.

Какие изменения мне нужно сделать, чтобы мой udf 'read_files_from_list' принял MutableList [String] и вернул логическое значение

1 Ответ

1 голос
/ 28 марта 2019

mapPartitions ожидает преобразования итератора в итератор.Вы возвращаете постоянное значение true / false как логическое значение.

Вот как вы можете написать функцию

def read_files_from_list(keys:Iterator[String]): Iterator[Boolean] = keys.map( key => {
  // my logic to iterate over keys
  if success
     return true;
  else 
     return false;
})
...