首页 > 解决方案 > javardd中如何通过header进行过滤?

问题描述

我正在编写一个JavaRDD代码,我必须将 csv 上传到JavaRDD命名的RestaurantDetailRDD. 有RestaurantDetailRDD一个地址列,必须过滤到另一个RDD名为addressRDD. 我只需要过滤条件,我可以按 csv 中提供的标题拆分地址列。

// provide path to input text file
String path = "/home/lingesh/Downloads/newitems.csv";

// read text file to RDD
JavaRDD<String> restaurantDetailRDD = sc.textFile(path);

// collect RDD for printing
for(String line:restaurantDetailRDD.collect()){
    System.out.println(line);
}

如您所见,我刚刚创建了RestaurantDetailRDD

我希望地址列放置在不同的位置RDD

标签: javaapache-sparkrddfilterfunction

解决方案


如果您知道address列的位置,您只需执行一个map函数将 RDD 转换为另一个 RDD。

JavaRDD<String> columnRdd = rdd.map(f -> {

    String[] arr = f.split(",");
    return arr[position];
});

System.out.println("new count " + columnRdd.count());

这种方式更好,因为您使用的是 spark 函数,这意味着您可以处理 spark 分区并使计算更快。在您确实需要打印结果进行测试之前,不要尝试使用基本的 java 函数。


推荐阅读