我正在开发Java + Apache Spark应用程序。它的一个功能是trim Strings。例如:
// 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 original = jsc.parallelize(Arrays.asList("aaa", "bbbb", "ccccc");
int num = 4;
JavaRDD mapped = original.map(s -> trim(s, num));
映射的新JavaRDD将包含(null,null,“c”),我将不得不使用过滤器清理空值。
我的问题是:有没有办法在执行map时删除这些值,或者在映射all时不返回任何值,如果结果为null?
要删除或过滤某些值,你可以使用.filterRDD。
但不能用.map用于跳过元素或过滤它们。可以用flatMap在此处使用支持预期功能的方法。在代码中尝试以下行:
mapped.flatMap(x -> Arrays.asList((x == null)? (new String[0]) : (new String[]{x})).iterator());
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。