Удаление нулей при отображении JavaRDD - PullRequest
0 голосов
/ 20 ноября 2018

Я занимаюсь разработкой приложения Java + Apache Spark. Одна из его функций - обрезать струны. Например:

// Having JavaSparkContext jsc previously defined and a function like 
// the following already defined:
private String trim(String s, int charsToTrim);
// that returns a new String with length = s.length() - charsToTrim or 
// null if its new length is <= 0

JavaRDD<String> original = jsc.parallelize(Arrays.asList("aaa", "bbbb", "ccccc");
int num = 4;
JavaRDD<String> mapped = original.map(s -> trim(s, num));

Новый сопоставленный JavaRDD будет содержать (null, null, "c"), и мне придется очистить нулевые значения с помощью фильтра.

Вопрос, который у меня возникает: есть ли способ удалить эти значения при выполнении карты или не возвращать никакие значения при отображении всех, если результат равен нулю?

Спасибо.

1 Ответ

0 голосов
/ 20 ноября 2018

Чтобы удалить или отфильтровать некоторые значения, вы всегда можете использовать .filter поверх СДР.

Но вы не можете использовать .map для пропуска элементов или их фильтрации. Однако здесь вы можете использовать метод flatMap, который поддерживает предполагаемую функциональность. Попробуйте следующую строку в вашем коде:

mapped.flatMap(x -> Arrays.asList((x == null)? (new String[0]) : (new String[]{x})).iterator());
...