PySpark学习笔记(5)——文本特征处理

今天有处理文本特征数据,刚开始因为不太熟悉pyspark环境下处理文本数据的流程,导致踩了不少的坑。在这里记录一下,以供以后参考。

先写下整个处理的流程:

(1)从数据库中提取数据

(2)将提取的数据转换成DataFrame格式

(3)使用tokenizer分词

(4)将文本向量转换成稀疏表示的数值向量(字符频率向量)

(5)将tokenizer得到的分词结果转换数字向量

实现代码如下所示:

%pyspark

from pyspark.mllib.feature import Word2Vec
from pyspark.ml.feature import Word2Vec
from pyspark.ml.feature import CountVectorizer, CountVectorizerModel, Tokenizer, RegexTokenizer, StopWordsRemover

#1.从数据库中提取数据
org_df  = spark.sql("""
select label,username  
from XXX  #XXX代表数据表名,label和username分别代表标签列和数据列
""")

#2.将提取的数据转换成DataFrame格式
res_rdd = org_df.rdd.map(list).map(lambda x:[x[0],' '.join([i for i in x[1]])]).map(tuple)
#print(res_rdd.take(100))
res_df = spark.createDataFrame(res_rdd,['label','username'])


#3.使用tokenizer分词
tokenizer = Tokenizer(inputCol="username", outputCol="words")
t_words = tokenizer.transform(res_df)


#4.将文本向量转换成稀疏表示的数值向量(字符频率向量)
cv = CountVectorizer(inputCol="words", outputCol="features", vocabSize=5, minDF=2.0)
cv_model = cv.fit(t_words)
cv_result = cv_model.transform(t_words)


#5.将tokenizer得到的分词结果转换数字向量
word2Vec = Word2Vec(vectorSize=100, minCount=0, inputCol="words", outputCol="result")
w2v_model = word2Vec.fit(cv_result)
result = w2v_model.transform(cv_result)
#for feature in result.select("result").take(3):
    #print(feature)

#6.输出最终结果
result.show(100)


你可能感兴趣的:(PySpark学习笔记)