Как определить преобразование Spark RDD с помощью функции, отличной от лямбда

Недавно я начал использовать Spark и Java. В настоящее время я экспериментирую с преобразованиями и действиями RDD. На данный момент я читаю данные из csv, который содержит некоторые поля DateTime, а затем применяю фильтр, чтобы сохранить только те строки, которые моложе 2 дней, и, наконец, я проверяю, пуст ли результирующий RDD. Я написал простой фрагмент, который делает то, что я хочу, на минимальном уровне.

Function<List<String>, Boolean> filterPredicate = row -> new DateTime(row.get(1).isAfter(dtThreshold);

sc.textFile(inputFilePath)
            .map(text -> Arrays.asList(text.split(",")))
            .filter(filterPredicate)
            .isEmpty();

В этом простом случае я предположил, что объекты DateTime всегда находятся в первом столбце. Теперь я хочу расширить это, чтобы использовать несколько индексов столбцов. Но для этого мне нужно иметь возможность определить предикатную функцию с более чем одной строкой. Именно по этой причине я отделил определение предикатной функции от кода преобразования.

Как я должен определить такую ​​функцию?


person LetsPlayYahtzee    schedule 03.03.2017    source источник


Ответы (1)


Используйте обозначение фигурных скобок...

   Function<List<String>, Boolean> filterPredicate = row -> {
        boolean isDateAfter = new DateTime(row.get(1)).isAfter(dtThreshold);
        boolean hasName = row.get(2) != "";
        return isDateAfter && hasName;
    }
person Brad    schedule 03.03.2017