如何一次处理几个JavaRDD?

时间:2016-12-20 06:53:26

标签: java apache-spark apache-spark-sql spark-dataframe rdd

我有一个格式为csv的大型数据集,我需要对此数据集执行一些RDD操作,而不使用任何DataFrames / Dataset API和SparkSQL。实现这一点,我将每列数据加载到单独的JavaRDD中。

这是我的Sample数据集:

id    name    address   rank
1001  john    NY        68
1002  kevin   NZ        72
1003  steve   WA        64

这是我到目前为止尝试的代码:

JavaRDD<String> diskfile = sc.textFile("/Users/hadoop/Downloads/a.csv");
JavaRDD<String> idRDD=diskfile.flatMap(line -> Arrays.asList(line.split(",")[0]));
JavaRDD<String> nameRDD=diskfile.flatMap(line -> Arrays.asList(line.split(",")[1]));
JavaRDD<String> addressRDD=diskfile.flatMap(line -> Arrays.asList(line.split(",")[2]));

在此之后我在reduceByKeyaddressRDD上应用了nameRDD,如下所示:

JavaPairRDD<String,Integer> addresspair=address.mapToPair( t -> new Tuple2 <String,Integer>(t,1)).reduceByKey((x, y) -> x + y);
JavaPairRDD<String,Integer> namepair=nameRDD.mapToPair( t -> new Tuple2 <String,Integer>(t,1)).reduceByKey((x, y) -> x + y);

问题:

我在地址对上应用了soryByVale(交换键值)并获得了一个发生次数最多的地址值(result)。现在我需要返回所有必需的csv文件列,其中包含地址字段为result

1 个答案:

答案 0 :(得分:2)

您可以使用下面的filter

JavaRDD<String> filteredData = diskfile.filter(add -> add.contains(result));
filteredData.foreach(data -> {
            System.out.println(data);
        });