spark学习笔记——文本处理技术

tonglin0325 tonglin0325     2022-08-30     202

关键词:

1.建立TF-IDF模型

import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.mllib.linalg.{SparseVector => SV}
import org.apache.spark.mllib.feature.HashingTF
import org.apache.spark.mllib.feature.IDF

/**
  * Created by common on 17-5-6.
  */
object TFIDF {

  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setAppName("WordCount").setMaster("local")
    val sc = new SparkContext(conf)

//    val path = "hdfs://master:9000/user/common/20Newsgroups/20news-bydate-train/*"
    val path = "file:///media/common/工作/kaggle/test/*"
    val rdd = sc.wholeTextFiles(path)

    // 提取文本信息
    val text = rdd.map { case (file, text) => text }
    //    print(text.count())

    val regex = """[^0-9]*""".r

    // 排除停用词
    val stopwords = Set(
      "the", "a", "an", "of", "or", "in", "for", "by", "on", "but", "is", "not",
      "with", "as", "was", "if",
      "they", "are", "this", "and", "it", "have", "from", "at", "my",
      "be", "that", "to"
    )

    // 以使用正则表达切分原始文档来移除这些非单词字符
    val nonWordSplit = text.flatMap(t =>
      t.split("""W+""").map(_.toLowerCase))

    // 过滤掉数字和包含数字的单词
    val filterNumbers = nonWordSplit.filter(token =>
      regex.pattern.matcher(token).matches)

    // 基于出现的频率,排除很少出现的单词,需要先计算一遍整个测试集
    val tokenCounts = filterNumbers.map(t => (t, 1)).reduceByKey(_ + _)
    val rareTokens = tokenCounts.filter { case (k, v) => v < 2 }.map {
      case (k, v) => k
    }.collect.toSet

    // 每一个文档的预处理函数
    def tokenize(line: String): Seq[String] = {
      line.split("""W+""")
        .map(_.toLowerCase)
        .filter(token => regex.pattern.matcher(token).matches)
        .filterNot(token => stopwords.contains(token))
        .filterNot(token => rareTokens.contains(token))
        .filter(token => token.size >= 2) //删除只有一个字母的单词
        .toSeq
    }

    // 每一篇文档经过预处理之后,每一个文档成为一个Seq[String]
    val tokens = text.map(doc => tokenize(doc)).cache()

    println(tokens.distinct.count)
    // 第一篇文档第一部分分词之后的结果
    println(tokens.first())
    println(tokens.first().length)

    // 生成2^18维的特征
    val dim = math.pow(2, 18).toInt
    val hashingTF = new HashingTF(dim)

    // HashingTF 的 transform 函数把每个输入文档(即词项的序列)映射到一个MLlib的Vector对象
    val tf = hashingTF.transform(tokens)
    // tf的长度是文档的个数,对应的是文档和维度的矩阵
    tf.cache

    // 取得第一个文档的向量
    val v = tf.first.asInstanceOf[SV]
    println(v.size)
    // v.value和v.indices的长度相等,value是词频,indices是词频非零的下标
    println(v.values.size)
    println(v.indices.size)
    println(v.values.toSeq)
    println(v.indices.take(10).toSeq)

    // 对每个单词计算逆向文本频率
    val idf = new IDF().fit(tf)
    // 转换词频向量为TF-IDF向量
    val tfidf = idf.transform(tf)
    val v2 = tfidf.first.asInstanceOf[SV]
    println(v2.values.size)
    println(v2.values.take(10).toSeq)
    println(v2.indices.take(10).toSeq)

    // 计算整个文档的TF-IDF最小和最大权值
    val minMaxVals = tfidf.map { v =>
      val sv = v.asInstanceOf[SV]
      (sv.values.min, sv.values.max)
    }
    val globalMinMax = minMaxVals.reduce { case ((min1, max1),
    (min2, max2)) =>
      (math.min(min1, min2), math.max(max1, max2))
    }
    println(globalMinMax)

    // 比较几个单词的TF-IDF权值
    val common = sc.parallelize(Seq(Seq("you", "do", "we")))
    val tfCommon = hashingTF.transform(common)
    val tfidfCommon = idf.transform(tfCommon)
    val commonVector = tfidfCommon.first.asInstanceOf[SV]
    println(commonVector.values.toSeq)

    val uncommon = sc.parallelize(Seq(Seq("telescope", "legislation","investment")))
    val tfUncommon = hashingTF.transform(uncommon)
    val tfidfUncommon = idf.transform(tfUncommon)
    val uncommonVector = tfidfUncommon.first.asInstanceOf[SV]
    println(uncommonVector.values.toSeq)

  }


}

 

spark学习笔记4:数据读取与保存

Spark对很多种文件格式的读取和保存方式都很简单。Spark会根据文件扩展名选择对应的处理方式。Spark支持的一些常见文件格式如下: 1、文本文件   使用文件路径作为参数调用SparkContext中的textFile()函数,就可以读取一个文... 查看详情

spark图处理graphx学习笔记!

Spark图处理GraphX学习笔记!一、什么是GraphX?Graphx利用了Spark这样了一个并行处理框架来实现了图上的一些可并行化执行的算法。算法是否能够并行化与Spark本身无关算法并行化与否的本身,需要通过数学来证明已经证明的可并行... 查看详情

spark学习笔记——数据读取和保存

spark所支持的文件格式 1.文本文件在Spark中读写文本文件很容易。当我们将一个文本文件读取为RDD时,输入的每一行都会成为RDD的一个元素。也可以将多个完整的文本文件一次性读取为一个pairRDD,其中键是文件名,值是文件... 查看详情

手把手带你玩转spark机器学习-使用spark进行文本处理(代码片段)

系列文章目录手把手带你玩转Spark机器学习-专栏介绍手把手带你玩转Spark机器学习-问题汇总手把手带你玩转Spark机器学习-Spark的安装及使用手把手带你玩转Spark机器学习-使用Spark进行数据处理和数据转换手把手带你玩转Spark机器学... 查看详情

spark学习笔记——spark上数据的获取处理和准备

...获得的方式多种多样,常用的公开数据集包括:1.UCL机器学习知识库:包括近300个不同大小和类型的数据集,可用于分类、回归、聚类和推荐系统任务。数据集列表位于:http://archive.ics.uci.edu/ml/2.AmazonAWS公开数据集:包含的通常是大型... 查看详情

学习笔记--spark(代码片段)

参考来源:http://www.yiibai.com/spark/概述ApacheSpark是一个集群计算设计的快速计算。它是建立在HadoopMapReduce之上,它扩展了MapReduce模式,有效地使用更多类型的计算,其中包括交互式查询和流处理。Spark的主要特征是其内存集群计算... 查看详情

spark学习笔记

概念:Spark是加州大学伯克利分校AMP实验室,开发的通用内存并行计算框架。支持用scala、java和Python等语言编写应用程序。相较于Hdoop,往往有更好的运行效率。Spark包括了SparkCore,SparkSQL,SparkStreaming,MLlib和Graphx等组件。SparkCore:内... 查看详情

spark学习笔记—01spark集群的安装

一、概述关于Spark是什么、为什么学习Spark等等,在这就不说了,直接看这个:http://spark.apache.org,我就直接说一下Spark的一些优势:  1、快与Hadoop的MapReduce相比,Spark基于内存的运算要快100倍以上,基于硬盘的运算也要快1... 查看详情

spark学习笔记(代码片段)

本文章根据《Spark快速大数据分析/LearningSpark:Lightning-fastDataAnakysis》一书整理。这篇文章的主要目标和特点:简要、重点、完成后可用于开发1、Spark是什么Spark是一个用来实现快速而通用的集群计算的平台。其一个主要的特点... 查看详情

学习笔记spark——spark入门

一、Spark简介什么是Spark?快速、分布式、可扩展、容错的集群计算框架;Spark是基于内存计算的大数据分布式计算框架;低延迟的复杂分析;Spark是HadoopMapReduce的替代方案。二、Spark的发展历史对于一个具有相当技... 查看详情

2022年spark基础学习笔记

一、Spark学习笔记在OpenStack私有云上创建与配置虚拟机Spark基础学习笔记01:初步了解SparkSpark基础学习笔记02:Spark运行时架构Spark基础学习笔记03:搭建Spark单机版环境Spark基础学习笔记04:搭建Spark伪分布式环境Spark基础学习笔记05... 查看详情

supermap9d实时数据服务学习笔记

SuperMap在9月份发布了结合大数据技术的9D新产品,今天就和大家介绍下iServer9D中的实时数据服务。1、技术框架结合Spark的streaming流处理框架,将各种数据进行批量处理、存储。2、处理的流程iServer9D的实时数据服务可以通过各种通... 查看详情

spark学习笔记——构建分类模型

Spark中常见的三种分类模型:线性模型、决策树和朴素贝叶斯模型。线性模型,简单而且相对容易扩展到非常大的数据集;线性模型又可以分成:1.逻辑回归;2.线性支持向量机决策树是一个强大的非线性技术,训练过程计算量大并... 查看详情

spark学习:基本架构及原理

 ApacheSpark是一个围绕速度、易用性和复杂分析构建的大数据处理框架,最初在2009年由加州大学伯克利分校的AMPLab开发,并于2010年成为Apache的开源项目之一,与Hadoop和Storm等其他大数据和MapReduce技术相比,Spark有如下优势:Spar... 查看详情

学习笔记之shell的文本处理工具(代码片段)

1.比较文件的不同diff,comm,cmp首先创建两个文件。内容如下<spanstyle="font-size:18px;">[root@wwwPractice]#catExample1abcdef[root@wwwPractice]#catExample2abcdefghi</span>1.diff比较 查看详情

c++文本处理的学习笔记(代码片段)

1.使用内存字符流来加速字符串拼接我们可以使用ostringstream来加速多次字符串的拼接操作,因为string内部是用字符数组实现的,直接使用+操作符进行字符串拼接,会导致频繁的数组的内存申请和数据复制,从... 查看详情

大数据学习(24)——spark入门

在学Spark之前,我们再回顾一下MapReduce的知识,这对我们理解Spark大有裨益。在大数据的技术分层中,Spark和MapReduce同为计算层的批处理技术,但是Spark比MapReduce要快很多。看看官网是怎么说的ApacheSpark。简介ApacheSpark是一个统一的... 查看详情

python+大数据学习笔记(代码片段)

PySpark使用pyspark:•pyspark=python+spark•在pandas、numpy进行数据处理时,一次性将数据读入内存中,当数据很大时内存溢出,无法处理;此外,很多执行算法是单线程处理,不能充分利用cpu性能spark的核心... 查看详情