2024.6.16

public class SparkSQL09_Source_Req {
    public static void main(String[] args) {

        // TODO 在编码前,设定Hadoop的访问用户
        System.setProperty("HADOOP_USER_NAME","atguigu");

        final SparkSession sparkSession = SparkSession
                .builder()
                .enableHiveSupport() // TODO 启用Hive的支持
                .master("local[*]")
                .appName("SparkSQL")
                .getOrCreate();

        //sparkSession.sql("show tables").show();

//        sparkSession.sql("CREATE TABLE `user_visit_action`(\n" +
//                "  `date` string,\n" +
//                "  `user_id` bigint,\n" +
//                "  `session_id` string,\n" +
//                "  `page_id` bigint,\n" +
//                "  `action_time` string,\n" +
//                "  `search_keyword` string,\n" +
//                "  `click_category_id` bigint,\n" +
//                "  `click_product_id` bigint, --点击商品id,没有商品用-1表示。\n" +
//                "  `order_category_ids` string,\n" +
//                "  `order_product_ids` string,\n" +
//                "  `pay_category_ids` string,\n" +
//                "  `pay_product_ids` string,\n" +
//                "  `city_id` bigint --城市id\n" +
//                ")\n" +
//                "row format delimited fields terminated by '\\t';");
//
//        sparkSession.sql("load data local inpath 'data/user_visit_action.txt' into table user_visit_action;");
//
//        sparkSession.sql("CREATE TABLE `city_info`(\n" +
//                "  `city_id` bigint, --城市id\n" +
//                "  `city_name` string, --城市名称\n" +
//                "  `area` string --区域名称\n" +
//                ")\n" +
//                "row format delimited fields terminated by '\\t';");



        sparkSession.sql("CREATE TABLE `product_info`(\n" +
                "  `product_id` bigint, -- 商品id\n" +
                "  `product_name` string, --商品名称\n" +
                "  `extend_info` string\n" +
                ")\n" +
                "row format delimited fields terminated by '\\t';");

        sparkSession.sql("load data local inpath 'data/city_info.txt' into table city_info;");
        sparkSession.sql("load data local inpath 'data/product_info.txt' into table product_info;");

        sparkSession.sql("select * from city_info limit 10").show();

        // TODO 需求:
        //    Spark Core :      热门品类Top10
        //    Spark SQL  : 各区域热门商品Top3

        // TODO 1. 如果需求中有【各个XXXX】描述
        //      表述的基本含义就是相同的数据分在一个组中 :group by
        // TODO 2. 热门:只从点击量统计 => (商品ID, 点击数量)
        // TODO 3. Top3: (组内)排序后取前3名

        /*

        区域      商品      点击数量    排序号
        -----------------------------------
        华北      鞋       5000        1
        华北      鞋       5000        1
        华北      鞋       5000        1
        华北      鞋       5000        1
        华北      鞋       5000        1
        华北      衣服     3500        2
        华北      帽子     1500        3
        东北      鞋       6000        1
        东北      手机     5500        2
        东北      电脑     5200        3

        ---------------------------------------------------------------------
        区域      商品      城市      点击数量     总的点击数量     比率      顺写号
        ---------------------------------------------------------------------
        华北      鞋       北京      5000        14000         5/14      1
        华北      鞋       天津      4000        14000         4/14      2
        华北      鞋       保定      3000        14000         3/14      3
        华北      鞋       石家庄    2000        14000         2/14      4

        1. 行转列?
        2. 如何拼接结果

        SQL不能做或不好做的功能,可以采用自定义 UDF,UDAF 函数来实现

        需求的实现方式:SQL + UDAF


         */



        // TODO 释放资源
        sparkSession.close();

    }
posted @ 2024-06-16 23:44  258333  阅读(20)  评论(0编辑  收藏  举报