我正在开发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,则在映射所有映射时不返回任何值?
谢谢。
答案 0 :(得分:0)
要删除或过滤某些值,您可以始终在RDD上使用.filter
。
但是您不能使用.map
来跳过或过滤元素。但是,您可以在此处使用flatMap
方法,该方法支持预期的功能。在代码中尝试以下行:
mapped.flatMap(x -> Arrays.asList((x == null)? (new String[0]) : (new String[]{x})).iterator());