spark 新闻相识度计算

原创 2016年06月02日 10:49:58
/**
  * Created by zxl on 2016/5/5.
  * 余弦相识度计算
  */

import java.sql.{Connection, DriverManager, ResultSet}
import java.text.SimpleDateFormat
import java.util.Date
;
import kafka.serializer.StringDecoder
import kafka.producer._
import org.apache.log4j.{Level, Logger}
import org.apache.spark._
import org.apache.spark.ml.feature.{HashingTF, IDF, Tokenizer}
import org.apache.spark.mllib.classification.NaiveBayes
import org.apache.spark.mllib.linalg.{Vector, Vectors,SparseVector =>SV}
import org.apache.spark.mllib.regression.LabeledPoint
import org.apache.spark.sql.Row
import org.apache.spark.streaming._
import org.apache.spark.streaming.kafka._
import org.apache.spark.sql.Row;

object Cossimi {
  case class RawDataRecord(category:String,text:String)
  def main(args: Array[String]) {
    val sparkConf = new SparkConf().setAppName("cos")
    val sc = new SparkContext(sparkConf)

    val sqlContext = new org.apache.spark.sql.SQLContext(sc)
    import sqlContext.implicits._
    Logger.getRootLogger.setLevel(Level.ERROR)
    var srcRDD = sc.textFile("/home/spark/art.txt").map {
      x =>
        var data = x.split(",")
        RawDataRecord(data(0), data(1))
    }

    var trainingDF = srcRDD.toDF()
    trainingDF.take(2).foreach(println);
    var tokenizer = new Tokenizer().setInputCol("text").setOutputCol("words")
    var wordsData = tokenizer.transform(trainingDF)

    println("output1")

    //===============hashing tf =============
    var hashingTF = new HashingTF().setNumFeatures(500000).setInputCol("words").setOutputCol("rawFeatures")
    
    var featurizedData = hashingTF.transform(wordsData)
    
    var idf = new IDF().setInputCol("rawFeatures").setOutputCol("features")
    var idfModel = idf.fit(featurizedData)

    
    val rescaledData = idfModel.transform(featurizedData)
    //val content_list = collection.mutable.ListBuffer[String]()
    val content_list = rescaledData.select($"category", $"features").collect().toList

    println("out put 2")
   
    val docSims = rescaledData.select($"category", $"features").map {
      case Row(id1, idf1) =>
        import breeze.linalg._
        val sv1 = idf1.asInstanceOf[SV]
        val bsv1 = new SparseVector[Double](sv1.indices, sv1.values, sv1.size)
        content_list.filter(_(0) != id1).map { case Row(id2, idf2) =>
            val sv2 = idf2.asInstanceOf[SV]
            val bsv2 = new SparseVector[Double](sv2.indices, sv2.values, sv2.size)
            val cosSim = bsv1.dot(bsv2).asInstanceOf[Double] / (norm(bsv1) * norm(bsv2))
            (id1, id2, cosSim)
        }
    }
    //docSims.take(5).foreach(println)
    println("insert mysql ......")
    docSims.foreach{
      cos_list =>
        cos_list.sortWith( _._3 >_._3).take(5).foreach{
          x =>
            val news_id = x._1
            val t_id = x._2
            val value = x._3
            insert_sim(news_id.toString,t_id.toString,value)
        }
    }
    sc.stop()
  }
版权声明:本文为博主原创文章,未经博主允许不得转载。

【总结】搜狐基于Spark的新闻和广告推荐

原文:http://www.csdn.net/article/1970-01-01/2825353 摘要:对一个媒体网站来讲,一个比较重要的任务就是获取用户对于不同类型文章的兴趣分布。用户的兴趣分布会...
  • dengxing1234
  • dengxing1234
  • 2017年03月10日 17:19
  • 23098

基于LR的新闻多分类(基于spark2.1.0, 附完整代码)

自从引进DataFrame之后,spark在ml方面,开始使用DataFrame作为RDD的上层封装,以屏蔽RDD层次的复杂操作,对应用开发者提供简单的DataFrame,以减少开发量。本文以最新的s...
  • yhao2014
  • yhao2014
  • 2017年03月04日 13:47
  • 3893

基于LR的新闻多分类(基于spark2.1.0, 附完整代码)

原创文章!转载请保留原始文章链接,谢谢! 环境: Scala2.11.8 + Java1.8.0_112 Spark2.1.0 + HanLP1.3.2   ...
  • u010159842
  • u010159842
  • 2017年12月13日 10:38
  • 272

使用Spark完成基于TF-IDF特征的新闻热点聚类

写在前面互联网各个地方时时刻刻都在发生着这样或者那样的事件,如果使用人工去观察根本无法全文们的知晓哪地方发生了什么热点事件,做为主流媒体更喜欢第一时间得知热点事件的发生,好及时的紧靠热点。舆情监控的目...
  • whzhaochao
  • whzhaochao
  • 2017年06月23日 17:43
  • 1966

spark应用(三)文本分类

一、特征提取 1、什么是特征提取?      对某一模式的组测量值进行变换,以突出该模式具有代表性特征的一种方法(百度百科)。或者参考多方面的解释: http://www.igi-global.c...
  • legotime
  • legotime
  • 2017年03月08日 13:48
  • 789

spark中文文本分类

最近要做一个点评中文的文本分类模型,想在spark中训练模型,然后通过把tf过程、idf过程、以及模型封装到一个类里面一个java类中,然后写到redis中,但是spark中idf过程中碰到一些困难,...
  • luoyexuge
  • luoyexuge
  • 2017年04月01日 15:01
  • 1011

C# 计算两个字符串相识度

由于最近的项目需要,有幸接触到了这方面的算法问题,字符串相似度,顾名思义,就是指两个字符串的相似程度。这一类的算法有很多,主要有编辑距离算法(Levenshtein Distance)、最长公共子...
  • MeGoodtoo
  • MeGoodtoo
  • 2017年06月16日 15:40
  • 354

图片相识度比较

最近项目要用到图片对比,上网搜了一下。有2中方法! 第一种 Java实现图片比对(1)-MD5方式 这是地址:http://chenxu-8456.iteye.com/blog/1322014 ...
  • u011074770
  • u011074770
  • 2015年03月22日 16:46
  • 738

Spark机器学习文本处理数据集

  • 2016年06月20日 10:57
  • 13.79MB
  • 下载

基于 Spark 框架的文本主题特征提取与分类

  • 2018年01月17日 19:14
  • 386KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:spark 新闻相识度计算
举报原因:
原因补充:

(最多只允许输入30个字)