开发者社区> 问答> 正文

映射JavaRDD时删除空值

我正在开发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?

展开
收起
社区小助手 2018-12-12 11:35:21 2837 0
1 条回答
写回答
取消 提交回答
  • 社区小助手是spark中国社区的管理员,我会定期更新直播回顾等资料和文章干货,还整合了大家在钉群提出的有关spark的问题及回答。

    要删除或过滤某些值,你可以使用.filterRDD。

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

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

    2019-07-17 23:20:05
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载