千家信息网

SogouQ中如何实现WordCount

发表于:2025-01-26 作者:千家信息网编辑
千家信息网最后更新 2025年01月26日,今天就跟大家聊聊有关SogouQ中如何实现WordCount,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。PS1: 日志原格式是GB2312编
千家信息网最后更新 2025年01月26日SogouQ中如何实现WordCount

今天就跟大家聊聊有关SogouQ中如何实现WordCount,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

PS1: 日志原格式是GB2312编码, 一定要记得转成UTF-8

PS2: 日志格式和格式说明:

访问时间\t用户ID\t[查询词]\t该URL在返回结果中的排名\t用户点击的顺序号\t用户点击的URL,

这个格式有坑,

深坑:

"该URL在返回结果中的排名\t用户点击的顺序号"这两个字段之间的分割符并不是制表符\t, 而是空格

val sogouQRdd = sc.textFile("hdfs://node1:9000/sogouQ/input")sogouQRdd.cache    # 在下一次Action操作时, 将日志文件缓存到内存中

实现普通的 WordCount, 但结果不会像 MapReduce 那样按 Key(word) 排序

sogouQRdd.filter(_.split('\t').length == 5): 有两个搜索关键字的字符串(为什么只是两个,别问我是怎么知道的), 居然有制表符\t, 一定要记得过滤掉

val wcWithoutSortRdd = sogouQRdd.filter(_.split('\t').length == 5).map(_.split('\t')(2)).map((_, 1)).reduceByKey(_ + _)wcWithoutSortRdd.saveAsTextFile("hdfs://node1:9000/sogouQ/output/wc1")

wcWithoutSortRdd的输出结果Top10

([中天ZT1818评论+site:www.pcpop.com|product.pcpop.com|channel.pcpop.com|pop.pcpop.com],1)([三一重工+筑路机械],1)([最快的视频网站],1)([zhutan],3)([氟康],3)([石家庄战役],2)([国外女子监狱],1)([A42B331参数],1)([78bar],1)([临沂麦可斯],2)

实现按 Value(count) 排序(降序)的 WordCount

思路: 在 wcRdd 的基础上, 先把K(word), V(count)反转, 此时对Key(count)进行排序, 最后再反转回去

val wcSortByCountRdd = wcWithoutSortRdd.map(x => (x._2, x._1)).sortByKey(false).map(x => (x._2, x._1))wcSortByCountRdd.saveAsTextFile("hdfs://node1:9000/sogouQ/output/wc2")

思路2: 直接使用 sortBy() 操作

// _._2 : 元组的第2项, 就是 count; false : 按降序排序val wcSortByCountRdd = wcWithoutSortRdd.sortBy(_._2, false)wcSortByCountRdd.saveAsTextFile("hdfs://node1:9000/sogouQ/output/wc2")

wcSortByCountRdd的输出结果Top10

([哄抢救灾物资],66906)([汶川地震原因],58766)([封杀莎朗斯通],12649)([一个暗娼的自述],9758)([广州军区司令员],8661)([暗娼李湘],8584)([成都警方扫黄现场],5371)([百度],4958)    // 用搜狗搜百度, 好像在黑百度, 嘿嘿嘿([尼泊尔地图],4886)([现役解放军中将名单],4721)

看完上述内容,你们对SogouQ中如何实现WordCount有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

0