背景: 挖掘重要的关键词问题:数据量较大(百万量级),单机版的python虽然处理起来简单,但是时间较长,内存是否溢出还不好说(看机器性能)解决方案: spark 分布式处理原始数据: 一个txt文件,文件格式每一行都是去停用词、分词之后的句子代码如下:import org.apache.spark.ml.feature.{HashingTF,IDF,Tokenizer}val data = sc.textFile(file_path + "xx.txt").toDF("sentence")val tokenizer = new Tokenizer().setInputCol("sentence").setOutputCol("words")
val wordsData = tokenizer.transform(data)
val hashingTF = new HashingTF().setInputCol("words").setOutputCol("rawFeatures")
val featurizedData = hashingTF.transform(wordsData)
val idf = new IDF().setInputCol("rawFeatures").setOutputCol("features")
val idfModel = idf.fit(featurizedData)
val rescaledData = idfModel.transform(featurizedData)
val d1 = rescaledData.select("words","features")
val d2 = d1.select(col("words"),col("features").cast("string"))val Df2 = d2.withColumn("features_1",split(col("features"), "],")).select(col("words"),col("features_1").getItem(0).as("col1"),col("features_1").getItem(1).as("col2"))val code = (sentence: String) => {sentence.replace("[","").replace("]","").replace(")","")}
val addCol = udf(code)val DF3 = Df2.withColumn("col3", addCol(Df2("col2")))val DF4 = DF3.select(col("words").cast("string"),col("col3"))val DF5 = DF4.withColumn("words_",addCol(DF4("words")))val DF6 = DF5.select("words_","col3")DF6.createOrReplaceTempView("aa")val DF7 = spark.sql("select words_,col3,single_id,single_tim from aa lateral view posexplode(split(words_,',')) t as single_id_index,single_id lateral view posexplode(split(col3,',')) t as single_tim_index,single_tim where single_id_index = single_tim_index")val DF8 = DF7.select(col("single_id"),col("single_tim").cast("Double"))val DF9 = DF8.groupBy("single_id").sum("single_tim")
val DF10 = DF9.sort(DF9("sum(single_tim)").desc)DF10.show(5000)巧妙的应用点:
1、应用udf函数
2、在DF6变量的时候,存在一个两列字符串,需要将字符串中的词与另一个字符串中的相同位置的值进行对应,并且每行的句子个数还不一样,如果将spark Dataframe 格式数据转化成.rdd.map{...}后续操作比较麻烦,用到hive的窗口函数posexplode是一个多行转多列的方法,而且还可以找到index,大大提高了效率缺点: 代码没有整理,看着有点乱

spark计算TF-IDF值(中文)相关推荐

  1. 使用spark计算文档相似度

    2019独角兽企业重金招聘Python工程师标准>>> 1.TF-IDF文档转换为向量 以下边三个句子为例 罗湖发布大梧桐新兴产业带整体规划 深化伙伴关系,增强发展动力 为世界经济发 ...

  2. 搜索引擎:文本分类——TF/IDF算法

    原理 TFIDF的主要思想是:如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类.TFIDF实际上是:TF * IDF,TF ...

  3. 关键词提取算法—TF/IDF算法

    关键词提取算法一般可分为有监督学习和无监督学习两类. 有监督的关键词提取方法可以通过分类的方式进行,通过构建一个较为完善的词表,然后判断每个文档与词表中的每个词的匹配程度,以类似打标签的方式,达到关键 ...

  4. tf-idf词向量和bow_使用词袋Bow和TF IDF进行多标签分类

    tf-idf词向量和bow 1.加载数据 (1. Load the data) For this study, we are using Kaggle data for Toxic Comment C ...

  5. 文本特征抽取的向量空间模型(VSM)和TF/IDF方法

    文本特征抽取 两组小说,一组是爱情的,另一组是科幻的.我们能否用支持向量机训练一个模型,用来识别小说类型呢? 这个并不容易.因为支持向量机这类机器学习算法只能接受数学里面的向量作为输入.如果用它来做文 ...

  6. spark 算子例子_10年大数据架构师,用一文带你玩转Spark计算框架,你能读懂吗?...

    首先明确一点:学计算框架主要就是学2部分: 1.资源调度 2.任务调度 写一个spark程序包含加载配置文件,创建上下文,创建RDD , 调用RDD的算子,用户在算子中自定义的函数 map端:狭窄的理 ...

  7. Spark中的键值对操作-scala

    1.PairRDD介绍 Spark为包含键值对类型的RDD提供了一些专有的操作.这些RDD被称为PairRDD.PairRDD提供了并行操作各个键或跨节点重新进行数据分组的操作接口.例如,PairRD ...

  8. tf/idf_Neo4j:带密码的TF / IDF(和变体)

    tf/idf 几周前,我写了一篇博客文章,介绍了如何使用scikit-learn在HIMYM成绩单上运行TF / IDF,以按情节找到最重要的短语,然后我很好奇在Neo4j中很难做到. 我首先将Wik ...

  9. Neo4j:带密码的TF / IDF(和变体)

    几周前,我写了一篇博客文章,介绍了如何使用scikit-learn在HIMYM成绩单上运行TF / IDF,以按情节找到最重要的短语,然后我很好奇在Neo4j中很难做到. 我首先将Wikipedia的 ...

  10. 当前方法的代码已经过优化,因此无法计算表达式的值

    当前方法的代码已经过优化,因此无法计算表达式的值 /************************************************************************** ...

最新文章

  1. java 线程 通过interrupted_Java线程的传说(1)——中断线程Interrupted的用处
  2. php接口数据安全解决方案(一)
  3. 区块链带来的价值包括哪些_爱链社区干货:区块链技术为冷链物流带来的了那些价值?...
  4. CPPUNIT的安装和编译
  5. TCP/IP 四次断开
  6. 5、Linux系统的目录结构
  7. oracle分析函数大全非常详细
  8. table 去掉td重复的边框_css怎么解决表格边框线重复问题
  9. macOS Sierra,Xcode 8配置openCV3
  10. ansible生成巡检报告
  11. 403高校毕业设计选题
  12. AppOps 命令大全
  13. VR学习第一节:VR是什么?VR AR的区别
  14. uni-app学习记录
  15. 小说《疯狂的程序员》~经典语录
  16. 针对“PL2303HXA自2012已停产,请联系供货商”问题的解决办法
  17. ctfshow菜狗杯webwp
  18. 网络史话 因特网简史
  19. 嵌入式系统开发笔记77:认识电磁波
  20. 统计学计算机计算合适组数,《医学统计学》

热门文章

  1. [20161219]关于LANGUAGE_MISMATCH.txt
  2. sscanf函数—(sprintf的反)
  3. ASP.NET MVC 音乐商店 - 7.成员管理和授权
  4. PAT甲级1122 Hamiltonian Cycle:[C++题解] 图论、模拟
  5. 2020年高等数学方法与提高(上海理工大学)学习笔记:多元函数积分学
  6. 递归与递推 普通排队问题及带约束条件的排队问题 c代码
  7. 自考计算机及应用笔记,自考“计算机及应用”专业论文参考范文
  8. 安卓代码拉下来编译后怎么运行_支付宝秒开是因为用了方舟编译器?官方回应...
  9. 多核处理器_手机处理器性能排行:骁龙865第四,麒麟9000拿下第二
  10. lucene python_Python下的Lucene,PyLucene