文档章节

标签生成器

别寒
 别寒
发布于 2017/09/20 18:01
字数 300
阅读 111
收藏 0

行业解决方案、产品招募中!想赚钱就来传!>>>

package com.hhb.spark.core

import org.apache.spark.{SparkConf, SparkContext}

import com.alibaba.fastjson.JSON

/**
  * 标签生成器
  * Created by dell on 2017/9/20.
  */
object TagGenerator {
  def main(args: Array[String]) {
    val conf = new SparkConf()
      .setAppName("TagGenerator").setMaster("local")
      .set("spark.testing.memory", "2147480000")
    val sc = new SparkContext(conf)

    // 加载文件
    val rdd1 = sc.textFile("c://temptags.txt")
    // 过滤文件
    val rdd2 = rdd1.map(line => {
      val arr = line.split("\\t")// 切割
      val busId = arr(0)
      val text = arr(1)
      // 将字符串转为json对象
      val jo = JSON.parseObject(text)
      val jarr = jo.getJSONArray("extInfoList")
      if(jarr != null && jarr.size() > 0){
        val v1 = jarr.getJSONObject(0)
        val arr2 = v1.getJSONArray("values")

        if (arr2 != null && arr2.size() > 0){
          var str = ""
          var i = 0
          while (i < arr2.size()) {
            str = str + arr2.getString(i) + ","
            i += 1
          }
          (busId, str.substring(0, str.length - 1))
        }
        else (busId, "")
      }
      else (busId, "")
    })

    // 过滤,没有评论的过滤掉
    val rdd3 = rdd2.filter(t => {
      t._2 != null && !"".equals(t._2)
    })

    // 按照value压扁
    val rdd4 = rdd3.flatMapValues(_.split(","))

    // 重组key busId-comm, 1
    val rdd5 = rdd4.map(t=>{
      (t._1 + "-" + t._2, 1)
    })

    // 聚合
    val rdd6 = rdd5.reduceByKey(_ + _)

    // 变换成(busId, (comm, count))
    val rdd7 = rdd6.map(t => {
      val arr = t._1.split("-")
      (arr(0), (arr(1), t._2) :: Nil)
    })

    // 安装busId进行聚合,values是list
    val rdd8 = rdd7.reduceByKey(_ ++ _)

    // 按key降序排序
    val rdd9 = rdd8.map(t => {
      val x = t._2.sortBy(t=>{
        t._2
      }).reverse.take(5)
      (t._1, x)
    })

    val rdd99 = rdd9.sortBy(t => {
      t._2(0)._2
    },false,1)

    // 变换成(busId, )
    val rdd10 = rdd99.map(t =>{
      val col = t._2
      var desc = "";
      for (tt <- col){
        desc = desc + tt._1 + "(" + tt._2 + "),"
      }
      (t._1,desc.substring(0, desc.length-1))
    })

    rdd10.foreach(println)

    sc.stop()
  }
}

别寒
粉丝 30
博文 273
码字总数 155300
作品 0
永州
程序员
私信 提问
加载中
请先登录后再评论。
代码生成器--Codgen

Codgen是一个基于数据库元数据模型,使用freemarker模板引擎来构建输出的代码生成器。freemarker的数据模型结构通常来说都是一个Map树状结构模型,codgen也不例外,它的数据模型这棵树的根节...

黄天政
2013/01/29
1.4W
2
C/C++ 代码文档生成器--cldoc

cldoc 是一个使用 clang 实现的 C/C++ 代码文档生成器。 特点: 使用 clang 可靠解析大多数复杂的 C++ 项目 零配置 使用 markdown 做为文档格式 生成描述 API 的 XML 文档 使用简单格式用于文...

匿名
2013/02/14
1.4K
0
数据库表单生成器--SQLScreens

SQLScreens 是一个使用 Tcl/TK 编写的简单关系型数据库表单生成工具。可让你快速创建查询界面,并指定相应的表和字段。支持多种数据库,包括:MySQL, SQLite, and INFORMIX, and ODBC for o...

匿名
2013/02/17
887
0
基于 ThinkPHP 的内容管理系统--歪酷CMS

歪酷网站管理系统(歪酷CMS)是一款基于THINKPHP框架开发的PHP+MYSQL网站建站程序,本程序实现了文章和栏目的批量动态管理,支持栏目无限分类,实现多管理员管理,程序辅助功能也基本实现了常见的文...

鲁大在线
2013/02/19
6.9K
1
静态博客网站生成器--Hexo

Hexo 是一个基于nodejs 的静态博客网站生成器,作者是来自台湾的 Tommy Chen 特点: 不可思议的快速 ─ 只要一眨眼静态文件即生成完成 支持 Markdown 仅需一道指令即可部署到 GitHub Pages 和...

匿名
2013/04/05
2.8W
4

没有更多内容

加载失败,请刷新页面

加载更多

数据获取的小技巧

在大数据如此火的时代,我们要获取更多数据,就要进行数据采集,过滤,然后再进行使用。比如当我们在进行一个项目并且需要大量真实数据时,就需要通过爬虫去获得,有些爬取额数据还不能直接使用,...

xiaotaomi7
48分钟前
21
0
docker cp 容器和虚拟机间的数据拷贝

容器复制到主机 docker cp {container_name}:{source_path} {target_path}#例子: docker cp php:www/php.ini /home/alex/php.ini 主机复制到容器 docker cp {source_path} {container_nam......

关元
56分钟前
25
0
spring boot整合kafaka批量消费

spring boot整合kafaka批量消费: 配置文件: kafka: producer: bootstrap-servers: 127.0.0.1:9092 batch-size: 16785 #一次最多发送数据量 retries: 1 #发送失败后的重复发送次数 buffer-m...

漫步行者
今天
7
0
最新苹果多屏电脑控制技术---ios群控/苹果群控/一键实时同步操作/入门安装步骤以及功能讲解

创联苹果群控是一款通过无线发送命令来操作主控手机来带动全部被控手机,主控手机怎么操作被控手机全部同步进行相同操作,支持一键每台手机输入不一样的文字!无需连接USB数据线、无需XP框架...

osc_bodzcw38
今天
10
0
NOIP模拟赛 编码

题目描述 一个字符串str的p型编码a的定义如下:把str表示成b1个c1,b2个c2…bn个cn,然后将b1,c1,b2,c2,…,bn,cn收尾拼接成的字符串中最短的字符串设为a。例如:字符串122344111可被描述为"1个...

osc_wcs4pa6z
今天
17
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部