Переменная драйвера Spark доступна из Executor, а именно foreachPartition - PullRequest
0 голосов
/ 08 сентября 2018

Я пытаюсь использовать spark для обработки некоторых идентификаторов и хочу выполнить дедупликацию для каждой партии

если мой код похож на

HashSet<String> uniqueID = new HashSet<>();
foreachPartition((VoidFunction<Iterator<T>>) idIterator -> {

...
//add unique id
if (!uniqueID.contains(id)){
uniqueID.add(id)
}
});

в этом случае, так как foreachpartition выполняется на рабочем узле, но я определяю свой хэш-набор вне foreachpartition, он все еще будет работать? Я знал, что сокращение по ключу будет лучше всего с этим справиться, и я изменяю его, но просто для анализа поведения существующего кода

1 Ответ

0 голосов
/ 08 сентября 2018

Переместите хешсет внутри foreachPartition и, основываясь на ваших комментариях, такой подход возможен. Однако вам нужно будет разделить так, чтобы значение Id было в том же разделе, а не над разделами. При ошибке сериализации это происходит - просто запустил проверку, чтобы убедиться. Более того, ваш подход не подходит для способа параллельной обработки Spark.

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