spark分布式大数据计算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)
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值