Spark mapPartitions итератор возвращает дубликаты записей - PullRequest
0 голосов
/ 13 июня 2018

У меня есть класс реализации для FlatMapFunction >>, String>.Инициализация некоторых несериализуемых соединений для каждого раздела.Но когда я вызываю next () для итератора, он дает одну и ту же запись для нескольких разделов.Ниже приведен код:

@Override
    public Iterator < String > call(Iterator < Tuple2 < String, Iterable < String >>> tuple2Iterator)
    throws Exception {
        BitLambdaService lambda = buildClient();
        List <String> resultList = new ArrayList < > ();
        while (tuple2Iterator.hasNext()) {
            Tuple2 < String, Iterable < String >> tpl = tuple2Iterator.next();
            // do something
        }
        return resultList.iterator();
    }

Кто-нибудь сталкивался с этой проблемой раньше?Или знаете как это исправить?

1 Ответ

0 голосов
/ 27 июня 2018

Решил, вызвав rdd.cache() сразу после преобразования.Проблема возникла потому, что преобразования выполняются ленивым образом, и когда действие применяется к RDD, преобразования фактически выполняются, когда действие применяется к RDD.Таким образом, mapPartitions не ожидал завершения метода вызова и назначил те же записи другому исполнителю.

...