添加maven依赖:

    <dependencies><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.60</version></dependency><dependency><groupId>org.apache.spark</groupId><artifactId>spark-core_2.11</artifactId><version>2.3.3</version></dependency></dependencies>

数据地址如下(真实数据)

https://pan.baidu.com/s/1GYr_sR4CBXCmd1AIaBbvPg

1、json工具类,解析json数据,并且拿到我们想要的字段(有标签的字段)

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;public class ReviewTags {//86913510  {"reviewPics":null,"extInfoList":null,"expenseList":null,"reviewIndexes":[2],"scoreList":[{"score":5,"title":"口味","desc":""},{"score":5,"title":"服务","desc":""},{"score":5,"title":"环境","desc":""}]}public static String extractTags(String jsonStr){JSONObject object = JSON.parseObject(jsonStr);if(object == null || !object.containsKey("extInfoList")){return "";}JSONArray array = object.getJSONArray("extInfoList");if(array == null) {return "";}StringBuilder sb = new StringBuilder();for (int i = 0; i < array.size(); i++) {JSONObject obj = array.getJSONObject(i);if (obj != null && obj.containsKey("title") && obj.getString("title").equals("contentTags") && obj.containsKey("values")) {JSONArray arr = obj.getJSONArray("values");if(arr == null){continue;}boolean begin = true;for (int j = 0; j < arr.size(); j++) {if (begin) {begin = false;} else {sb.append(",");}sb.append(arr.getString(j));}}}return sb.toString();}/*** 测试类,用于拿出extInfoList的内容,并json解析* @param args*/public static void main(String[] args){String s = "{\"reviewPics\":[{\"picId\":2405538806,\"url\":\"http://p0.where.net/shaitu/7c10019c62947d01ded80cc698c77c90217708.jpg\",\"status\":1},{\"picId\":2405442602,\"url\":\"http://p0.meituan.net/shaitu/d41ef06f5d16d5d3cbc871765ff93130270451.jpg\",\"status\":1}],\"extInfoList\":[{\"title\":\"contentTags\",\"values\":[\"回头客\",\"上菜快\",\"环境优雅\",\"性价比高\",\"菜品不错\"],\"desc\":\"\",\"defineType\":0},{\"title\":\"tagIds\",\"values\":[\"493\",\"232\",\"24\",\"300\",\"1\"],\"desc\":\"\",\"defineType\":0}],\"expenseList\":null,\"reviewIndexes\":[1,2],\"scoreList\":null}";//上面定义的是静态方法,所以直接调用System.out.println(extractTags(s));System.out.println(extractTags(""));System.out.println(extractTags(null));}
}

2、标签统计:

import com.fengrui.taggen.ReviewTags
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}/*** 团购网站的标签生成应用*/
object TagGenerator {def main(args: Array[String]): Unit = {val conf: SparkConf = new SparkConf().setAppName("TagGenerator").setMaster("local[*]")val sc = new SparkContext(conf)//86913510  {"reviewPics":null,"extInfoList":null,"expenseList":null,"reviewIndexes":[2],"scoreList":[{"score":5,"title":"口味","desc":""},{"score":5,"title":"服务","desc":""},{"score":5,"title":"环境","desc":""}]}val lines: RDD[String] = sc.textFile("file:///F:\\ideaworkspace\\temptag\\src\\main\\resources\\temptags.txt")//将数据用制表符切割,并且过滤出长度等于2的所有满足条件的数据(原始数据制表符切割以后// 左面是商店ID,右面是客户反馈信息)val filter: RDD[Array[String]] = lines.map(_.split("\t")).filter(x => x.length == 2)//将过滤完的数据进行映射,x(0) -> ReviewTags.extractTags(x(1))的意思就是(86913510,环境好,好吃,..)(86913510,)//利用json工具类拿出出第二个元素,有的是空,有的会有数据val useJson: RDD[(String, String)] = filter.map(x => x(0) -> ReviewTags.extractTags(x(1)))
//    useJson.take(50).foreach(println)//因为useJson中的二元组的value值有的是空,所以将useJson中第二个元素(value)长度大于零的二元组过滤出来(取出)val ujf: RDD[(String, String)] = useJson.filter(x => x._2.length > 0)//还是映射,变成  86913510 -> [环境好,好吃...]val ujfm: RDD[(String, Array[String])] = ujf.map(x => x._1 -> x._2.split(","))//将value值压平,变为(86913510,环境好)(86913510,好吃)....val fmv: RDD[(String, String)] = ujfm.flatMapValues(x => x)
//    s.take(50).foreach(println)//给fmv中元祖都拼1,((86913510,环境好),1) ((86913510,好吃),1)....val fmvm: RDD[((String, String), Int)] = fmv.map(x => (x._1,x._2) -> 1)
//    a.take(20).foreach(println)//进行聚合,聚合完以后为  ((78824187,干净卫生),7)  ((77373671,分量少),1)  ((84270191,体验好),2)val reduceByKey: RDD[((String, String), Int)] = fmvm.reduceByKey(_+_)
//    reduceByKey.foreach(println)//变成(78824187,List((干净卫生,7)))  (77373671,List((分量少,1)))...val rsm: RDD[(String, List[(String, Int)])] = reduceByKey.map(x => x._1._1 -> List((x._1._2,x._2)))
//    rsm.foreach(println)//:::为数组的聚合,变为(83644298,List((体验好,1), (性价比高,1), (服务热情,1), (价格实惠,1), (味道赞,1)))//(71039150,List((团建,1), (价格实惠,1), (朋友聚会,1), (环境优雅,1), (体验好,1)))....val rsmr: RDD[(String, List[(String, Int)])] = rsm.reduceByKey(_:::_)
//    rsmr.foreach(println)//reverse是倒序排列//最后变为(83644298,味道赞:1,价格实惠:1,服务热情:1,性价比高:1,体验好:1)val res: RDD[(String, String)] = rsmr.map(x => x._1 -> x._2.sortBy(_._2).reverse.take(10).map(a => a._1 + ":" + a._2.toString).mkString(","))
//    res.foreach(println)//写出存储res.map(x => x._1 + "\t" + x._2).coalesce(1).saveAsTextFile("file:///G:/res1.txt")println("----success----")}}

收集到的数据:

大数据项目——团购网标签的生成相关推荐

  1. 大数据项目中的QA需要迎接新的挑战

    大数据项目中的QA需要迎接新的挑战 根据IDC全球半年度大数据和分析支出指南的最新预测,到2022年全球大数据和业务分析解决方案的收入将达到2600亿美元.在大数据和业务分析解决方案上投资增长最快的行 ...

  2. print的describe的展示全部数据_大数据项目中的QA需要迎接新的挑战

    根据IDC全球半年度大数据和分析支出指南的最新预测,到2022年全球大数据和业务分析解决方案的收入将达到2600亿美元.在大数据和业务分析解决方案上投资增长最快的行业包括银行(复合年增长率13.3%) ...

  3. Cris 小哥哥的大数据项目之 Hive 统计 YouTube 热门视频

    Cris 小哥哥的大数据项目之 Hive 统计 YouTube 热门视频 Author:Cris 文章目录 Cris 小哥哥的大数据项目之 Hive 统计 YouTube 热门视频 Author:Cr ...

  4. 大数据项目实战——基于某招聘网站进行数据采集及数据分析(四)

    大数据项目实战 第四章 数据预处理 文章目录 大数据项目实战 学习目标 一.分析预处理数据 1)salary 2)city 3)skillLabels 4)companyLabelList.posit ...

  5. 智慧农业大数据项目建设方案

    智慧农业大数据项目建设方案 (获取完整版文档请添加关注并私信沟通!) 目录 项目概述.................................... 6 项目名称............... ...

  6. 多数大数据项目都以失败而告终的原因

    多数大数据项目都以失败而告终的原因 摘要:核心提示:几乎每个人的心目中,大数据就是企业IT部门的大大小小的结构化和非结构化数据,而且其量正在成倍的增长. [...] 核心提示:几乎每个人的心目中,大数 ...

  7. 助力工业物联网,工业大数据项目介绍及环境构建【一、二】

    文章目录 工业大数据项目介绍及环境构建 01:专栏目标 02:项目背景 03:项目需求 04:业务流程 05:技术选型 06:Docker的介绍 07:Docker的网络 08:Docker的使用 0 ...

  8. 51GIS学院|分享大数据项目架构思考(一)

    大数据概念到今天,炒作的最高风口已经过去了,根据Gartent发布的HypeCycle曲线,大数据已经处于炒作顶点之后的衰退期. HypeCycle曲线 而从HypeCycle曲线定义的阶段来看,越过 ...

  9. 大数据项目(基于spark)--新冠疫情防控指挥作战平台项目

    大数据项目(基于spark)–新冠疫情防控指挥作战平台项目 文章目录 第一章 项目介绍 1.1 项目背景 1.2 项目架构 1.3 项目截图 1.4 功能模块 第二章 数据爬取 2.1 数据清单 2. ...

最新文章

  1. JUnit4用法详解
  2. Mariadb dockerfile测试
  3. Ui5 tool debug - ctrl+alt+shift+s实现原理
  4. [css] 使用css3做一个魔方旋转的效果
  5. Android中创建自己的对话框
  6. as工程放到源码编译_Flutter源码剖析(二):源码的阅读与调试环境配置
  7. dotfuscator初步
  8. DBA日常工作职责 - 我对DBA的七点建议
  9. 一位 90 后程序员的自述:如何从年薪 3W 到 30W
  10. mysql insert 主键冲突_在MySql中建立存储过程和解决insert into select 中主键冲突的有关问题...
  11. pandas表字段为空用其余表替换
  12. 『常识』罗胖的《罗辑思维》中推荐的书 — 未校正
  13. 计算机专业,25岁成985高校博导,13篇顶会!入职半年发ICML,网友:万点暴击...
  14. 连接linux服务器安卓模拟器,云服务器怎么运行安卓模拟器
  15. html设计判断闰年,javascript如何判断是否为闰年?
  16. HTML 播放视频的embed标签和Object标签(转)
  17. Apache FOP 将Java对象转换为pdf文件
  18. Activity 审批流简单介绍
  19. 去面试却被问的哑口无言,是不是踏入了机器学习误区
  20. 北科大协同中心计算机,2021考研调剂:北科大钢铁共性技术协同创新中心公告

热门文章

  1. 软考中级 真题 2016年上半年 信息系统管理工程师 应用技术
  2. HAProxy 日志管理
  3. Boost 学习之二 BGL
  4. 更改UIButton的图片颜色
  5. 1、什么是pytest
  6. maven 依赖包问题
  7. 一键还原软件 简简单单恢复你的系统
  8. 使用java技术实现IBM VIAVOICE 语音朗读技术
  9. 微软Zune闰年bug 分析
  10. 从港口煤炭工人,到国企大数据负责人:曾经的网瘾少年是怎么做到的?