日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

spark计算TF-IDF值(中文)

發(fā)布時(shí)間:2025/4/5 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spark计算TF-IDF值(中文) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
背景: 挖掘重要的關(guān)鍵詞問題:數(shù)據(jù)量較大(百萬量級(jí)),單機(jī)版的python雖然處理起來簡(jiǎn)單,但是時(shí)間較長(zhǎng),內(nèi)存是否溢出還不好說(看機(jī)器性能)解決方案: spark 分布式處理原始數(shù)據(jù): 一個(gè)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)巧妙的應(yīng)用點(diǎn): 1、應(yīng)用udf函數(shù) 2、在DF6變量的時(shí)候,存在一個(gè)兩列字符串,需要將字符串中的詞與另一個(gè)字符串中的相同位置的值進(jìn)行對(duì)應(yīng),并且每行的句子個(gè)數(shù)還不一樣,如果將spark Dataframe 格式數(shù)據(jù)轉(zhuǎn)化成.rdd.map{...}后續(xù)操作比較麻煩,用到hive的窗口函數(shù)posexplode是一個(gè)多行轉(zhuǎn)多列的方法,而且還可以找到index,大大提高了效率缺點(diǎn): 代碼沒有整理,看著有點(diǎn)亂

?

總結(jié)

以上是生活随笔為你收集整理的spark计算TF-IDF值(中文)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。