栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

pyspark中jieba的使用问题

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

pyspark中jieba的使用问题

解决方案来源于

错误信息
# 错误代码
data.select('Review').rdd.map(
	lambda x:jieba.cut(content)
).collect()

#错误信息
NameError: name 'content' is not defined

原因分析

网上大佬说的,来源:
大概意思是map()里的东西没有序列化,查阅博客后得知,jieba是运行在Driver端的,而map()是运行在Executor端的,两个操作是在不同地方执行的,所以我把new JiebaSegmenter()的操作搬到了map()里就ok了。

翻译成‘朴树’一点的意思就是,spark还没开始运动,jieba就等不及了,但我还是看不太懂他是怎么解决的,因为人生苦短。

之后继续查阅资料,终于……


解决方案

1.导包
2.封装分词函数
3.注册分词函数
4.使用它吧

# 词频统计
import jieba
from pyspark.sql import functions as F  # spark的自定义函数包
from pyspark.sql.types import ArrayType, StringType  # sparkSQL的数据类型

def seg_sentence(content):  # 封装结巴
    return [i for i in jieba.cut(content)]

seg_sentence=F.udf(seg_sentence,ArrayType(StringType()))  # 定义sparkSQL自定义函数
text=data.select(seg_sentence('Review').alias('words')).show()  # 就OK了

分词后的词频统计

看了一大圈教程,发现没多少python语言的,希望看到的大家多发python版的资料,为python传道。

1.拍扁words中的数组
2.为每个元素加上初始值1
3.根据key(词)来统计

text.rdd
        .flatMap(lambda x: x.words)
            .map(lambda x:(x,1))
                .reduceByKey(lambda a,b:a+b)
                    .collect()
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/960614.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号