本次我们将从数据的流向和类型带大家深入spark

交叉原则

我们判断数据类型和传输时,可以遵循一个交叉原理来,具体实例如下:
(1)以会员积分的处理举例
此处的数据为:
会员编号,积分

1506001,587
1506002,115
1506003,56
1506004,614
1506005,290
1506001,79
1506004,15

public class Test23 {
    public static void main(String[] args) {
        //jsc
        JavaSparkContext jsc = SparkConfig.Instance("HuiYuanJiFen");
        //获取文件
        String shujulaiyuan = "/mulu2/zimulu2/zimulu22/huiyuanjifen.csv";
        //去重后,根据逗号分割符分割出两个元素,进而转换为将String 类型转化为键值对类型
        JavaRDD<String> result = jsc.textFile(shujulaiyuan).distinct().mapToPair(new PairFunction<String, String, String>() {
            @Override
            public Tuple2<String, String> call(String s) throws Exception {

                return new Tuple2<>(s.split(",", -1)[0], s.split(",", -1)[1]);
            }
          //根据会员ID分组处理,对同一组(即一个会员号)的积分进行累加统计
		  //最后的结果就是将<会员ID,积分>转化为Tuple2<会员, String>类型
        }).reduceByKey(new Function2<String, String, String>() {
            @Override
            public String call(String v1, String v2) throws Exception {
                return v1+v2;
            }
        }).map(new Function<Tuple2<String, String>, String>() {
            @Override
            public String call(Tuple2<String, String> s) throws Exception {
                return s._1()+","+s._2();
            }
        });
        //写入文件
        HdfsUtil.writeRddFile(result,"/mulu2/zimulu2/zimulu22/jifentongji.csv");
    }
    }

如图所示,数据类型的转换正好呈现一个交叉,所以我们在判断数据传输的时候,可以先查看下方函数返回类型,然后查看数据原本类型,再根据交叉原则对应起来,进而对应每个类型代表的数据字段含义和内容

mapToPair--------->String->Tuple<String, String>
reduceByKey----->String,String->String
map----------------->Tuple<String,String>->String

在这里插入图片描述

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐