106.Spark大型电商项目-各区域热门商品统计-关联商品信息并使用自定义get_json_object()

目录

代码

GetJsonObjectUDF.java

AreaTop3ProductSpark.java


本篇文章记录各区域热门商品统计-关联商品信息并使用自定义get_json_object()。

代码

product

GetJsonObjectUDF.java

package graduation.java.spark.product;

import com.alibaba.fastjson.JSONObject;
import org.apache.spark.sql.api.java.UDF2;

/**
 * FileName: GetJsonObjectUDF
 * Author:   hadoop
 * Email:    3165845957@qq.com
 * Date:     19-4-1 下午10:20
 * Description:
 * get_json_object()
 *
 * 技术点:自定义UDF函数
 */
public class GetJsonObjectUDF implements UDF2<String,String,String> {
    private static final long serialVersionUID = 1L;
    @Override
    public String call(String json, String field) throws Exception {
        try{
            JSONObject jsonObject =  JSONObject.parseObject(json);
            return jsonObject.getString(field);
        }catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}

AreaTop3ProductSpark.java

  /**
     * 生成区域商品点击次数临时表(包含了商品的完整信息)
     * @param sqlContext
     */
    private static void generateTempAreaFullProductClickCountTable(SQLContext sqlContext){
        // 将之前得到的各区域各商品点击次数表,product_id
        // 去关联商品信息表,product_id,product_name和product_status
        // product_status要特殊处理,0,1,分别代表了自营和第三方的商品,放在了一个json串里面
        // get_json_object()函数,可以从json串中获取指定的字段的值
        // if()函数,判断,如果product_status是0,那么就是自营商品;如果是1,那么就是第三方商品
        // area, product_id, click_count, city_infos, product_name, product_status

        // 为什么要费时费力,计算出来商品经营类型
        // 你拿到到了某个区域top3热门的商品,那么其实这个商品是自营的,还是第三方的
        // 其实是很重要的一件事

        // 技术点:内置if函数的使用
        String sql  =  "SELECT " +
                "tapcc.area, " +
                "tapcc.product_id, " +
                "tapcc.click_count, " +
                "tapcc.city_infos, " +
                "pi.product_name, " +
                "if(get_json_object(pi.extend_info,'product_status ')=0,'自营商品','第三方商品') product_status " +
                "FROM tmp_area_product_click_count tapcc " +
                "JOIN product_info pi ON tapcc.procuct_id = pi.product_id";

        Dataset ds = sqlContext.sql(sql);
        ds.registerTempTable("tmp_area_fullprod_click_count");
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值