映射JavaRDD时删除null

时间:2018-11-19 22:26:08

标签: java apache-spark null

我正在开发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”),并且我将不得不使用过滤器清除null值。

我的问题是:是否有办法在执行映射时删除这些值,或者如果结果为null,则在映射所有映射时不返回任何值?

谢谢。

1 个答案:

答案 0 :(得分:0)

要删除或过滤某些值,您可以始终在RDD上使用.filter

但是您不能使用.map来跳过或过滤元素。但是,您可以在此处使用flatMap方法,该方法支持预期的功能。在代码中尝试以下行:

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