每日top3热点搜索词统计案例

Spark-SQL之每日top3热点搜索词案例统计 实现思路 1、针对原始数据(HDFS文件),获取输入的RDD 2、使用filter算子,去针对输入RDD中的数据,进行数据过滤,过滤出符合查询条件的数据。 2.1 普通的做法:直接在fitler算子函数中,使用外部的查询条件(Map),但是,这样做的话,是不是查询条件Map,会发送到每一个task上一份副本。(性能并不好) 2.2 优化后的做法:将查询条件,封装为Broadcast广播变... 阅读详情

数据格式:

日期,用户,搜索词,平台,版本

需求:

1、筛选出符合条件(城市,平台,版本)的数据

2、统计每天搜索uv排名前三的搜索词

3、按照每天的top3搜索词的uv搜索总次数,倒叙排序

4、将数据保存到hive表中

思路分析

1、针对原始数据(HDFS文件),获取输入RDD

2、使用filter算法,针对输入RDD中的数据,进行数据过滤,过滤出符合条件的数据

2.1普通的算法:直接在filter算法函数中,使用外部的查询条件(map),但是,这样做的话,是不是查询条件map,会发送到每一个task上一份副本,(性能不好)

2.2优化后的做法,将查询条件,封装为broadCast广播变量,在filter算法中使用broadCast广播变量。

3、将数据转换为(日期_搜索词,用户)格式,对他进行分组。然后再次进行映射,对每天每个搜索词的搜索用户进行去重操作,并统计去重后的数据,即为每天每个搜搜词的uv,最后获得(日期_搜搜词,uv)。

4、将得到的每天每个搜索词的uvRDD,映射为元素类型的RowRDD,转换为DataFrame。

5、注册为临时表,使用SparkSQL的开窗函数,统计每天的uv数量排名前三名的搜索词,以及他的搜索nv,最后获得一个DataFrame

6、将DataFrame转换为RDD,继续操作,按照每天日期来分组,并进行映射,计算出每天的top3搜索词的uv的总数,然后将uv总数作为key,将每天的top3搜索词以及搜索次数,拼接为一个字符串

7、按照每天的top3搜索总uv,进行排序,倒序排序

8、将排好的数据,再次映射回来,变成 日期_搜索词_uv的格式

9、再次映射为DataFrame,并将数据保存到hive中。

文本:

   2018-10-1:leo:water:beijing:android:1.0
2018-10-1:leo1:water:beijing:android:1.0
2018-10-1:leo2:water:beijing:android:1.0
2018-10-1:jack:water:beijing:android:1.0
2018-10-1:jack1:water:beijing:android:1.0
2018-10-1:leo:seafood:beijing:android:1.0
2018-10-1:leo1:seafood:beijing:android:1.0
2018-10-1:leo2:seafood:beijing:android:1.0
2018-10-1:leo:food:beijing:android:1.0
2018-10-1:leo1:food:beijing:android:1.0
2018-10-1:leo2:meat:beijing:android:1.0
2018-10-2:leo:water:beijing:android:1.0
2018-10-2:leo1:water:beijing:android:1.0
2018-10-2:leo2:water:beijing:android:1.0
2018-10-2:jack:water:beijing:android:1.0
2018-10-2:leo1:seafood:beijing:android:1.0
2018-10-2:leo2:seafood:beijing:android:1.0
2018-10-2:leo3:seafood:beijing:android:1.0
2018-10-2:leo1:food:beijing:android:1.0
2018-10-2:leo2:food:beijing:android:1.0
2018-10-2:leo:meat:beijing:android:1.0


代码:

package com.bynear.spark_sql;

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaPairRDD;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.function.FlatMapFunction;
import org.apache.spark.api.java.function.Function;
import org.apache.spark.api.java.function.PairFunction;
import org.apache.spark.broadcast.Broadcast;
import org.apache.spark.sql.DataFrame;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.RowFactory;
import org.apache.spark.sql.SQLContext;
import org.apache.spark.sql.hive.HiveContext;
import org.apache.spark.sql.types.DataTypes;
import org.apache.spark.sql.types.StructField;
import org.apache.spark.sql.types.StructType;
import scala.Tuple2;

import java.util.*;

public class DailyTop3Keyword {
    public static void main(String[] args) {
        SparkConf conf = new SparkConf();
        JavaSparkContext jsc = new JavaSparkContext(conf);
        SQLContext sqlContext = new HiveContext(jsc.sc());
//        伪造数据(这些数据可以来自mysql数据库)
        final HashMap<String, List<String>> queryParaMap = new HashMap<String, List<String>>();
        queryParaMap.put("city", Arrays.asList("beijing"));
        queryParaMap.put("platform", Arrays.asList("android"));
        queryParaMap.put("version", Arrays.asList("1.0", "1.2", "2.0", "1.5"));
//      将数据进行广播
        final Broadcast<HashMap<String, List<String>>> queryParamMapBroadcast = jsc.broadcast(queryParaMap);
//      读取文本
        JavaRDD<String> rowRDD = jsc.textFile("hdfs://Spark01:9000/zjs/daily.txt");
//      filter算子进行过滤
        JavaRDD<String> filterRDD = rowRDD.filter(new Function<String, Boolean>() {
            @Override
            public Boolean call(String log) throws Exception {
                String[] logSplit = log.split(":");
                String city = logSplit[3];
                String platform = logSplit[4];
                String version = logSplit[5];
                HashMap<String, List<String>> queryParamMap = queryParamMapBroadcast.value();
                List<String> cities = queryParamMap.get("city");
                if (!cities.contains(city) && cities.size() > 0) {
                    return false;
                }
                List<String> platforms = queryParamMap.get("platform");
                if (!platforms.contains(platform)) {
                    return false;
                }
                List<String> versions = queryParamMap.get("version");
                if (!versions.contains(version)) {
                    return false;
                }

                return true;
            }
        });
//        过滤出来的原始日志,映射为(日期_搜索词,用户)格式
        JavaPairRDD<String, String> dateKeyWordUserRDD = filterRDD.mapToPair(new PairFunction<String, String, String>() {
            @Override
            public Tuple2<String, String> call(String log) throws Exception {
                String[] logSplit = log.split(":");
                String date = logSplit[0];
                String user = logSplit[1];
                String keyword = logSplit[2];
                return new Tuple2<String, String>(date + "_" + keyword, user);
            }
        });
//        进行分组,获取每天每个搜索词,有哪些用户搜索了(没有去重)
        JavaPairRDD<String, Iterable<String>> dateKeywordUsersRDD = dateKeyWordUserRDD.groupByKey();
        List<Tuple2<String, Iterable<String>>> collect1 = dateKeywordUsersRDD.collect();
        for (Tuple2<String, Iterable<String>> tuple2 : collect1) {
            System.out.println("进行分组,获取每天每个搜索词,有哪些用户搜索了(没有去重)" + tuple2._2);
            System.out.println(tuple2);
        }

//        对每天每个搜索词的搜索用户  去重操作  获得前uv
        JavaPairRDD<String, Long> dateKeywordUvRDD = dateKeywordUsersRDD.mapToPair
                (new PairFunction<Tuple2<String, Iterable<String>>, String, Long>() {
                    @Override
                    public Tuple2<String, Long> call(Tuple2<String, Iterable<String>> dataKeywordUsers) throws Exception {
                        String dateKeyword = dataKeywordUsers._1;
                        Iterator<String> users = dataKeywordUsers._2.iterator();
//                去重   并统计去重后的数量
                        List<String> distinctUsers = new ArrayList<String>();
                        while (users.hasNext()) {
                            String user = users.next();
                            if (!distinctUsers.contains(user)) {
                                distinctUsers.add(user);
                            }
                        }
//              获取uv
                        long uv = distinctUsers.size();
//                日期_搜索词,用户个数
                        return new Tuple2<String, Long>(dateKeyword, uv);
                    }
                });
        List<Tuple2<String, Long>> collect2 = dateKeywordUvRDD.collect();
        for (Tuple2<String, Long> stringLongTuple2 : collect2) {
            System.out.println("对每天每个搜索词的搜索用户  去重操作  获得前uv");
            System.out.println(stringLongTuple2);
        }


//        将每天每个搜索词的uv数据,转换成DataFrame
        JavaRDD<Row> dateKeywordUvRowRDD = dateKeywordUvRDD.map(new Function<Tuple2<String, Long>, Row>() {
            @Override
            public Row call(Tuple2<String, Long> dateKeywordUv) throws Exception {
                String date = dateKeywordUv._1.split("_")[0];
                String keyword = dateKeywordUv._1.split("_")[1];
                long uv = dateKeywordUv._2;
                return RowFactory.create(date, keyword, uv);
            }
        });
        ArrayList<StructField> fields = new ArrayList<StructField>();
        fields.add(DataTypes.createStructField("date", DataTypes.StringType, true));
        fields.add(DataTypes.createStructField("keyword", DataTypes.StringType, true));
        fields.add(DataTypes.createStructField("uv", DataTypes.LongType, true));
        StructType structType = DataTypes.createStructType(fields);
        DataFrame dateKeywordUvDF = sqlContext.createDataFrame(dateKeywordUvRowRDD, structType);
        dateKeywordUvDF.registerTempTable("sales");
//        使用开窗函数,统计每天搜索uv排名前三的热点搜索词
//        日期  搜索词   人数个数  前三名
        final DataFrame dailyTop3KeyWordDF = sqlContext.sql("select date,keyword,uv from (select date, keyword, uv, row_number() over (partition by date order by uv DESC ) rank from sales ) tmp_sales where rank <=3");
//        将DataFrame转换为RDD, 映射,
        JavaRDD<Row> dailyTop3KeyWordRDD = dailyTop3KeyWordDF.javaRDD();

        JavaPairRDD<String, String> dailyTop3KeywordRDD = dailyTop3KeyWordRDD.mapToPair(new PairFunction<Row, String, String>() {
            @Override
            public Tuple2<String, String> call(Row row) throws Exception {
                String date = String.valueOf(row.get(0));
                String keyword = String.valueOf(row.get(1));
                String uv = String.valueOf(row.get(2));
//                映射为  日期  搜索词_总个数
                return new Tuple2<String, String>(date, keyword + "_" + uv);
            }
        });

        List<Tuple2<String, String>> collect = dailyTop3KeywordRDD.collect();
        for (Tuple2<String, String> stringStringTuple2 : collect) {
            System.out.println("开窗函数操作");
            System.out.println(stringStringTuple2);
        }


//          根据 日期分组
        JavaPairRDD<String, Iterable<String>> top3DateKeywordsRDD = dailyTop3KeywordRDD.groupByKey();
//        进行映射
        JavaPairRDD<Long, String> uvDateKeywordsRDD = top3DateKeywordsRDD.mapToPair(new PairFunction<Tuple2<String, Iterable<String>>, Long, String>() {
            @Override
            public Tuple2<Long, String> call(Tuple2<String, Iterable<String>> tuple) throws Exception {
                String date = tuple._1;
//                搜索词_总个数  集合
                Iterator<String> KeyWordUviterator = tuple._2.iterator();
                long totalUv = 0L;
                String dateKeyword = date;
                while (KeyWordUviterator.hasNext()) {
//                    搜索词_个数
                    String keywoarUv = KeyWordUviterator.next();
                    Long uv = Long.valueOf(keywoarUv.split("_")[1]);
                    totalUv += uv;
                    dateKeyword = dateKeyword + "," + keywoarUv;
                }

                return new Tuple2<Long, String>(totalUv, dateKeyword);
            }
        });
        JavaPairRDD<Long, String> sortedUvDateKeywordsRDD = uvDateKeywordsRDD.sortByKey(false);
        List<Tuple2<Long, String>> rows = sortedUvDateKeywordsRDD.collect();
        for (Tuple2<Long, String> row : rows) {
            System.out.println(row._2 + "    " + row._1);
        }


//        映射
        JavaRDD<Row> resultRDD = sortedUvDateKeywordsRDD.flatMap(new FlatMapFunction<Tuple2<Long, String>, Row>() {
            @Override
            public Iterable<Row> call(Tuple2<Long, String> tuple) throws Exception {
                String dateKeywords = tuple._2;
                String[] dateKeywordsSplit = dateKeywords.split(",");
                String date = dateKeywordsSplit[0];
                ArrayList<Row> rows = new ArrayList<Row>();
                rows.add(RowFactory.create(date, dateKeywordsSplit[1].split("_")[0],
                        Long.valueOf(dateKeywordsSplit[1].split("_")[1])));

                rows.add(RowFactory.create(date, dateKeywordsSplit[2].split("_")[0],
                        Long.valueOf(dateKeywordsSplit[2].split("_")[1])));

                rows.add(RowFactory.create(date, dateKeywordsSplit[3].split("_")[0],
                        Long.valueOf(dateKeywordsSplit[3].split("_")[1])));

                return rows;
            }
        });
        DataFrame finalDF = sqlContext.createDataFrame(resultRDD, structType);
        List<Row> rows1 = finalDF.javaRDD().collect();
        for (Row row : rows1) {
            System.out.println(row);
        }

        jsc.stop();

    }
}

注意点:

1、如果文本案例使用的是txt编辑,将文本保存ANSI格式,否则在groupByKey的时候,第一行默认会出现一个空格,分组失败。最开始使用的是UTF-8格式

2、文本的最后禁止出现空行,否则在split的时候会报错,出现数组越界的错误。

3、使用到窗口函数的时候,必须使用到HiveContext方法,HiveContext使用到的是SparkContext,使用使用jsc.sc()

运行结果:

进行分组,获取每天每个搜索词,有哪些用户搜索了(没有去重)[leo]
(2018-10-2_meat,[leo])
进行分组,获取每天每个搜索词,有哪些用户搜索了(没有去重)[leo, leo1, leo2, jack]
(2018-10-2_water,[leo, leo1, leo2, jack])
进行分组,获取每天每个搜索词,有哪些用户搜索了(没有去重)[leo, leo1]
(2018-10-1_food,[leo, leo1])
进行分组,获取每天每个搜索词,有哪些用户搜索了(没有去重)[leo1, leo2, leo3]
(2018-10-2_seafood,[leo1, leo2, leo3])
进行分组,获取每天每个搜索词,有哪些用户搜索了(没有去重)[leo, leo1, leo2, jack, jack1]
(2018-10-1_water,[leo, leo1, leo2, jack, jack1])
进行分组,获取每天每个搜索词,有哪些用户搜索了(没有去重)[leo2]
(2018-10-1_meat,[leo2])
进行分组,获取每天每个搜索词,有哪些用户搜索了(没有去重)[leo, leo1, leo2]
(2018-10-1_seafood,[leo, leo1, leo2])
进行分组,获取每天每个搜索词,有哪些用户搜索了(没有去重)[leo1, leo2]

(2018-10-2_food,[leo1, leo2])

对每天每个搜索词的搜索用户  去重操作  获得前uv
(2018-10-2_meat,1)
对每天每个搜索词的搜索用户  去重操作  获得前uv
(2018-10-2_water,4)
对每天每个搜索词的搜索用户  去重操作  获得前uv
(2018-10-1_food,2)
对每天每个搜索词的搜索用户  去重操作  获得前uv
(2018-10-2_seafood,3)
对每天每个搜索词的搜索用户  去重操作  获得前uv
(2018-10-1_water,5)
对每天每个搜索词的搜索用户  去重操作  获得前uv
(2018-10-1_meat,1)
对每天每个搜索词的搜索用户  去重操作  获得前uv
(2018-10-1_seafood,3)
对每天每个搜索词的搜索用户  去重操作  获得前uv

(2018-10-2_food,2)

窗函数操作
(2018-10-1,water_5)
开窗函数操作
(2018-10-1,seafood_3)
开窗函数操作
(2018-10-1,food_2)
开窗函数操作
(2018-10-2,water_4)
开窗函数操作
(2018-10-2,seafood_3)
开窗函数操作

(2018-10-2,food_2)

最终结果

[2018-10-1,water,5]
[2018-10-1,seafood,3]

[2018-10-1,food,2]


[2018-10-2,water,4]
[2018-10-2,seafood,3]
[2018-10-2,food,2]










Redis统计实战:HyperLogLog、Bitmap、Sorted Set与INCR命令的高效应用 在数据处理领域,实时统计是支撑业务决策的核心需求。其原理在于通过高效的数据结构和算法,对海量信息进行快速聚合与计算。从技术价值看,优秀的统计方案能极大提升系统性能,降低数据库压力。在应用场景上,无论是网站UV统计、用户行为分析还是实时排行榜,都需要兼顾精确性与资源消耗。Redis作为高性能内存数据库,提供了多种数据结构来解决这些挑战。其中,HyperLogLog以固定12KB内存实现海量数据去重估算,解决了UV统计的内存瓶颈;Bitmap则通过位操作高效处理二值状态统计,适用于签到与人群圈选。这些方案自然收 阅读详情

相关推荐

java统计正文中关键字个数

实现一个类KeywordIdentifier,读入一个java程序源文件,输出各个关键字的个数(注意,注释中出现的关键字不计入关键字个数)

【简单】搜索词汇的topK问题-Java

package live.every.day.ProgrammingDesign.CodingInterviewGuide.BigDataAndSpaceRestriction; /** * 搜索词汇的topK问题 * * 【题目】 * 某搜索公司一天的用户搜索词汇是海量的(百亿数据量),请设计一种求出每天最热top100词汇的可行办法。 * * 【难度】 * 简单 * * 【解答】 * 补充问题最开始还是用哈希分流的思路来处理,把包含百亿数据量的词汇文件分流到不同的机器上,具体多少台

了解➔熟悉➔掌握➔精通 520

Windows中的TLS 1.2启用方法(IIS、C#、.Net framework)

折腾几天了windows中的tls1.2启用方法!特此记录一下 开发背景: 在一个用.net framework 2.0开发的客户端程序里面嵌入功能调用第三方物联网相关接口,服务器上有一个restful接口用于接收第三方上报的数据及处理,最后再调用第三方的物联网相关接口。本机开发环境Windows 10,客户服务器是Windows Server 2008 R2。 第一次写这种物联网相关的接口调用,而且第三方提供的文档比较简单,最基本的报文示例都没。开发环境里面各种摸索一步一个坑,首先在发送HTTP请求前

dl1314ld的博客 1万+

项目:热点搜索词统计

项目要求根据用户上网的搜索记录对每天的热点搜索词进行统计,以了解用户所关心的热点话题。要求完成:统计每天搜索数量前3名的搜索词(同一天中同一用户多次搜索同一个搜索词视为1次)。数据。

weixin_61676991的博客 487

图自编码器(GAE)与变分图自编码器(VGAE)

在学习图自编码器之前先了解一下自编码器与变分自编码器。

小鱼的小窝 1万+

UG NX与PLC-1500的在环虚拟测试

TIA、PLCSIM、NetToPLCsim、KEPServerEX以及UG NX的在环虚拟测试

lvtlvtlvtlvt的博客 4220

redis 实现搜索热词统计

核心需求 一个项目中,遇到了搜索热词统计的需求,我使用了 Redis 的五大数据类型之一 Sorted Set 实现。目前有两项数据需要统计:“当日搜索热词 top10”和“当周搜索热词 top10”。 关于这两项数据的统计方法,目前想到了两种实现方法: 两个 Redis 的 Sorted Set 实现,一个 Sorted Set A 统计当天,0 点 top10 记录进 MySQL,Sorted Set 清零。一个 Sorted Set B 统计当周,每周日 top10 记录进 MySQL,Sorted

JellyfishMIX 的博客 4540

HTB Attacking GraphQL Skills Assessment

通过枚举应用,利用GraphQL API,发现sql注入点,然后利用找到flag。

qq_33522010的博客 454

热点搜索词统计

在数字化时代,网络已成为信息传播的主要渠道,而热点搜索词则是网民兴趣和需求的直观反映。通过对这些数据的统计和分析,我们不仅能够捕捉到社会关注的焦点,还能够预测市场趋势,甚至对社会动态做出快速响应。

weixin_69071279的博客 1015

ADS新手必看:ICCAP数据导入与导出CSV的完整流程(附常见问题解决)

本文为ADS新手详细讲解了如何将ICCAP测试数据导入ADS进行仿真分析,并导出为通用CSV格式的完整流程。内容涵盖文件格式解析、导入设置、数据验证、处理技巧及常见问题排查,重点解决了数据文件导入过程中的兼容性与单位映射等核心难点,帮助射频工程师高效连接测量与仿真环节。

peace的博客 560

Ubuntu零基础入门到精通【3.10讲】:旧版本 Ubuntu 升级与迁移路线:从 20.04 到 24.04 的完整实战指南

🏆 本文收录于 《滚雪球学 Ubuntu》 专栏。 本专栏面向有一定计算机基础,但尚未系统学习 Linux / Ubuntu 的读者,采用“滚雪球式学习法”:先装好、再会用、再理解、再优化、再实战,带你从第一次进入 Ubuntu 桌面 / 终端开始,逐步掌握 Ubuntu 的日常使用、命令操作、软件安装、系统配置、开发环境搭建与服务器部署能力。

**My Coding Family** 1250

79、Spark SQL之与Spark Core整合之每日top3热点搜索词统计案例实战

每日top3热点搜索词统计案例实战 数据格式: 日期 用户 搜索词 城市 平台 版本 需求: 筛选出符合查询条件(城市、平台、版本)的数据 统计出每天搜索uv排名前3的搜索词 按照每天的top3搜索词的uv搜索总次数,倒序排序 将数据保存到hive表中 实现思路分析 针对原始数据(HDFS文件),获取输入的RDD 使用filter算子,去针对输入RDD中的数据,进行数据过滤,过滤出...

ZJ__ZFH的博客 1942

delphi 调用deepseek r1 api 并流式返回结果

摘要:本文展示了一个使用Delphi调用DeepSeek API的代码示例,包含两种调用方式:一次性获取结果和流式返回结果。代码实现了完整的API请求处理,包括HTTP客户端设置、JSON数据处理和UI界面交互。其中流式调用通过TStreamReader处理服务器发送事件(SSE),实时更新到TRichEdit控件并保持滚动条位置。文章还提到界面美化优化,为Delphi开发者提供了调用AI服务的实用参考方案。(150字)

全粘工程师 502

48、Spark SQL之与Spark Core整合之每日top3热点搜索词统计案例实战

一、概述1、需求分析数据格式: 日期 用户 搜索词 城市 平台 版本 需求: 1、筛选出符合查询条件(城市、平台、版本)的数据 2、统计出每天搜索uv排名前3的搜索词 3、按照每天的top3搜索词的uv搜索总次数,倒序排序 4、将数据保存到hive表中 ###数据 keyword.txt 2018-10-1:leo:water:beijing:android:1.0 2018...

weixin_30830327的博客 210

企业级AI平台架构设计:AI应用架构师的未来趋势

企业级AI平台是AI从“实验室”走向“生产线”的关键,而AI应用架构师就是这条“生产线”的总设计师。未来,随着生成式AI、边缘计算、自治式AI的发展,架构师的角色将越来越重要——他们不仅要构建技术平台,还要连接技术与业务,让AI真正创造价值。“不要做‘只会调模型的工程师’,要做‘能解决业务问题的架构师’。因为,真正有价值的AI,从来不是“最先进的模型”,而是“能落地、能复用、能创造业务价值的平台”。愿你在企业AI转型的浪潮中,成为那个“搭建桥梁的人”——连接技术与业务,连接现在与未来。

小程序开发 973

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

从百亿搜索日志挖掘热点:解密每日 Top 100 热词

在信息爆炸的时代,搜索引擎每天都会处理天文数字的用户查询。对于搜索公司而言,快速准确地了解用户在关心什么——也就是找出最热门的搜索词汇——至关重要。这不仅能优化搜索体验,还能洞察社会热点。今天,我们就来模拟这个场景,解决一个经典的后端面试题:某大型搜索引擎公司,一天产生的用户搜索日志量达到百亿级别。请设计一个可行的方案,找出当天搜索频率最高的 Top 100 个词汇。

m0_73762612的博客 920

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

spark 项目应用-topn搜索热词统计

本文章通过spark读取hive数据,分析top热点搜索词import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.apache.s...

贾红平 1607

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

spark-SQL综合练习每日关键字的UV统计-scala

spark-SQL综合练习每日关键字的UV统计-scala1. 开发环境说明2. 运行环境说明3. 实现的需求如下4. 实现代码如下5. 分步输出的结果如下6. 。。。。。。 1. 开发环境说明 因为我测试了不同的开发环境会出错误,所以可用环境版本说明如下: IntelliJ IDEA 2019.1.1 (Ultimate Edition) JRE: 1.8.0_202-release-1483-...

xuanwenchao的专栏 693

hive综合应用案例 — 用户搜索日志分析

**用户ID**、**搜索关键词**、**搜索时间**、**设备类型**、**搜索结果点击情况**等。1002,"机械键盘",2023-10-01 14:10:56,"desktop",1。**目标**:使用Hive进行数据分析,挖掘用户搜索行为特征,优化搜索推荐系统。- **用户搜索时间分布** → 调整服务器资源或促销活动时间。- 使用**机器学习**(如PySpark)预测热门搜索趋势。- **设备差异** → 优化移动端/PC端搜索体验。2. **基础分析**(搜索量、设备分布、CTR)

weixin_66625287的博客 935

优快云【精品专栏】第23期

为了让各位专栏作者快速了解付费专栏销售情况,小编帮大家整理了站内付费专栏销售量排行(榜单每周一更新) 文内包含:付费专栏日榜、周销量榜、总销量榜 统计周期:2021年6月31日-2021年6月6日 目录 热门专栏排行榜(每日凌晨2点更新) 本周销量榜Top20 总销量排行榜Top20 搜索词访问量 各领域搜索词访问量(建议收藏此链接) 如何加入付费专栏? 如何提升付费专栏的转化? 付费专栏写作/包装指南 热门专栏排行榜(每日凌晨2点更新) https://blog.cs...

weixin_47064102的博客 833

如何用Skizze解决大数据去重难题?3个实战技巧分享

在当今数据爆炸的时代,处理海量数据的去重和统计分析成为了每个开发者面临的挑战。传统的数据库和存储方案在处理数十亿级别数据时往往显得力不从心,这时候就需要**Skizze**这样的概率数据存储服务来提供高效解决方案。Skizze(德语中意为"草图")是一个专门为计数和草图计算设计的概率数据结构存储服务,能够以极低的内存占用和近O(1)的时间复杂度解决大数据去重难题。 ## 🚀 Skizze是什么

gitblog_00301的博客 808

优快云【精品专栏】第25期

为了让各位专栏作者快速了解付费专栏销售情况,小编帮大家整理了站内付费专栏销售量排行(榜单每周一更新) 文内包含:付费专栏日榜、周销量榜、总销量榜 统计周期:2021年6月21日-2021年6月27日 目录 热门专栏排行榜(每日凌晨2点更新) 本周销量榜Top20 总销量排行榜Top20 搜索词访问量 各领域搜索词访问量(建议收藏此链接) 如何加入付费专栏? 如何提升付费专栏的转化? 付费专栏写作/包装指南 热门专栏排行榜(每日凌晨2点更新) https://blog.cs...

weixin_47064102的博客 613

优快云【精品专栏】第21期

为了让各位专栏作者快速了解付费专栏销售情况,小编帮大家整理了站内付费专栏销售量排行(榜单每周一更新) 文内包含:付费专栏日榜、周销量榜、总销量榜 统计周期:2021年5月17日-2021年5月23日 热门专栏排行榜(每日凌晨2点更新) https://blog.youkuaiyun.com/rank/list/column 本周销量榜Top20 ...

weixin_47064102的博客 570

优快云【精品专栏】第35期

为了让各位专栏作者快速了解付费专栏销售情况,小编帮大家整理了站内付费专栏销售量排行(榜单每周一更新) 文内包含:付费专栏日榜、周销量榜、总销量榜 统计周期:2021年8月30日-2021年9月5日 热门专栏排行榜(每日凌晨2点更新) https://blog.youkuaiyun.com/rank/list/column 本周销量榜Top20 排序 专栏标题 专栏id 作者用户名 作者昵称 1 PCL学习 9913573 qq_36...

weixin_47064102的博客 325

优快云【精品专栏】第22期

为了让各位专栏作者快速了解付费专栏销售情况,小编帮大家整理了站内付费专栏销售量排行(榜单每周一更新) 文内包含:付费专栏日榜、周销量榜、总销量榜 统计周期:2021年5月24日-2021年5月30日 热门专栏排行榜(每日凌晨2点更新) https://blog.youkuaiyun.com/rank/list/column 本周销量榜Top20 排序 专栏标题 专栏id 1 C试题 10033616 2 AutoSAR入门到精通系列讲解 9291827 ...

weixin_47064102的博客 1597
上一篇: SparkSQL性能优化
下一篇: Linux中安装nc(netcat)常见问题
JSON_ZJS
博客等级 码龄9年 30粉丝 159原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值