103.Spark大型电商项目-各区域热门商品统计-关联城市信息以及RDD转换为DataFrame后注册临时表

目录

代码

AreaTop3productSpark.java


本篇文章记录各区域热门商品统计-关联城市信息以及RDD转换为DataFrame后注册临时表。

代码

AreaTop3productSpark.java

  /**
     *生成点击商品信息基础临时表
     * @param sqlContext
     * @param cityid2clickActionRDD 商品点击信息
     * @param cityid2cityInfoRDD 城市信息
     */
    private static void generateTempClickProductBasicTable(
            SQLContext sqlContext,
            JavaPairRDD<Long,Row> cityid2clickActionRDD,
            JavaPairRDD<Long,Row> cityid2cityInfoRDD
    ){
        //执行join操作,进行点击行为数据和城市数据进行关联
        JavaPairRDD<Long,Tuple2<Row,Row>> joinedRDD = cityid2clickActionRDD.join(cityid2cityInfoRDD);

        //将上面的JavaPairRDD转换为一个JavaRDD<Row> 才能将RDD转换为Dataset
        JavaRDD<Row> mappedRDD = joinedRDD.map(
                new Function<Tuple2<Long, Tuple2<Row, Row>>, Row>() {
                    private static final long serialVersionUID = 1L;
                    @Override
                    public Row call(Tuple2<Long, Tuple2<Row, Row>> tuple) throws Exception {
                        long cityid = tuple._1;
                        Row clickAction = tuple._2._1;
                        Row cityInfo = tuple._2._2;

                        long productid= clickAction.getLong(1);
                        String cityName = cityInfo.getString(1);
                        String area = cityInfo.getString(2);

                        return RowFactory.create(cityid,cityName,area,productid);
                    }
                });

        //基于JavaRDD<Row>的格式,就可以将其转化为Dataset
        List<StructField> structFields = new ArrayList<StructField>();
        structFields.add(DataTypes.createStructField("city_id", DataTypes.LongType,true));
        structFields.add(DataTypes.createStructField("city_name", DataTypes.StringType,true));
        structFields.add(DataTypes.createStructField("area", DataTypes.StringType,true));
        structFields.add(DataTypes.createStructField("product_id", DataTypes.LongType,true));

        StructType schema = DataTypes.createStructType(structFields);

        Dataset ds = sqlContext.createDataFrame(mappedRDD,schema);

        //将Dataset中的数据注册为临时表
        ds.registerTempTable("tmp_clk_prod_basic");

    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值