pyspark:TF-IDF逆向文本词频度,以及mysql数据库连接

01.导入相关的库,生成SparkSession对象:

#导入相关的库
from os import truncate
from pyspark import sql
from pyspark.ml.feature import FeatureHasher, HashingTF,IDF,Tokenizer
from pyspark import SparkContext,SparkConf
from pyspark.sql import SparkSession
from pyspark.sql.types import *
spark = SparkSession.builder.config(conf=SparkConf()).getOrCreate()

02.连接mysql数据库,使用数据库中的表:

        (*已经隐藏IP和密码)

#连接mysql数据库
jdbcDF = spark.read.format("jdbc")\
    .option("driver","com.mysql.jdbc.Driver")\
    .option("url","jdbc:mysql://***.***.**.***:3306/Gadaite")\
    .option("dbtable","RedditNews")\
    .option("user","root")\
    .option("password","*******")\
    .load()
jdbcDF.show()

          jdbc.show()结果如下(默认只显示20行):

03.注册为临时表,实现SQL语句的查询和对数据的选取,表名:datasource

data = jdbcDF.createOrReplaceTempView("datasource")

04.选取前50行数据进行实验:

dataX = spark.sql("select News from datasource limit 50")
dataX.show()

        data.show()只是上图的前50行,但是字段只选取了`News`

05.导入序号生成的包,并生成序号:

        (其中通过每行的文字代替一个文本文件,实现)

from pyspark.sql.functions import monotonically_increasing_id
#创建一个dataframe,每一个句子代表一个文档
sentenceData = dataX.withColumn("id",monotonically_increasing_id())
sentenceData.show()

        sentenceData.show()结果如下:

06.在得到文档集合后,即可用tokenizer对句子进行分词

tokenizer = Tokenizer(inputCol="News", outputCol="words")
wordsData = tokenizer.transform(sentenceData)
wordsData.show()

         wordsData.show()结果如下:  

07.使用HashingTF的transform()方法把句子哈希成特征向量,这里设置哈希表的桶数为200。

分词序列被变换成一个稀疏特征向量,其中每个单词都被散列成了一个不同的索引值,

特征向量在某一维度上的值即该词汇在文档中出现的次数。

hashingTF = HashingTF(inputCol="words", outputCol="rawFeatures", numFeatures=200)
featurizedData = hashingTF.transform(wordsData)
featurizedData.select("words","rawFeatures").show(truncate=False)

        结果如下:      

  (部分画面简直太美,不忍直视,给个数据量小一点如下,但不是本文数据,本文是上面那个)

                       类似的样子:    

 

 08.使用IDF来对单纯的词频特征向量进行修正

idf = IDF(inputCol="rawFeatures", outputCol="features")
idfModel = idf.fit(featurizedData)

09.IDFModel是一个Transformer,调用它的transform()方法,即可得到每一个单词对应的TF-IDF度量值

rescaledData = idfModel.transform(featurizedData)
rescaledData.select("label", "features").show()

        最终结果如下(200为哈希桶的数量,后面的数字,代表在那个桶里面):

 

 10.结束:

spark.stop()

后续,可以将结果dataframe保存为CSV等本地文件,也可以使用RDD模式匹配等方法在写入数据库的某个表中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值