spark初识-使用rdd与sparksql 分词

spark初识-使用rdd与sparksql 分词,第1张

spark初识-使用rdd与sparksql 分词 spark原理

原理啥的就不多说了,这里一共使用了3种方法对文本内容进行分词,当然,是按照分组的形式分词,如果只是简单的分词,将分组去掉就好。

1 sparksql (1 )采用sql

为什么要将这个放在第一位呢,因为在我看来,这个是最容易理解的,仅仅只使用了简单的正则以及sql中的一些函数完成了分词。下面,请看代码:

//获取数据 如果数据在MySQL数据库中的使用相应的获取方式,这里是从hive中获取数据
df=spark.sql('''
select order_id,package_name from spark_catalog.nga.app_all
''')
df.show()
//构建临时表
df.createOrReplaceTempView('content ')
//分词 这里采用了explode这个函数,作用是将一行炸裂成多行
word_counter=spark.sql('''select user_id,word,count(*) as number
from content lateral view
explode(
    split(
            lower(
                regexp_replace(
//这里采用正则的原因是不希望有数字的存在或者是其他的符号
                        sms_content,"[^a-zA-Z'-]+"," "))," ")) t as word
group by user_id,word''')

这段代码的结果有两列。一列是用户信息,一列是单词。虽然结果符合预期,但文本中有大量与网站相关的信息,经过这段代码分开之后,出现的单词就是一堆字母的集合,不是很好。

(2)使用注册函数

在spark中,可以将函数带入sql中执行,条件是这个函数必须注册。

//申请临时表
df.createOrReplaceTempView('table_a')
//使用的函数,函数功能:将文本分词并返回结果,这里采用了wordninja库
def lower_and_split_1(r):
   return wordninja.split(r)
//注册函数
spark.udf.register('word_a',lower_and_split_1)
spark.sql('''
select user_id,word_a(lower(sms_content)) as sms_content from table_a
''').show()

使用库的好处是分出来的英语单词更为精确了,当然,坏处是数字也会加入其中。

2 RDD

这里直接使用库即可

def lower_and_split(line):
   return wordninja.split(line.sms_content.lower())
//由于使用的sqparksql读取的数据,这里采用rdd需要将其转换为rdd的形式
df.rdd.mapValues(lambda s: wordninja.split(s))

同样,也可以采用正则的形式

df.rdd.mapValues(lambda s:re.findall(r"[a-zA-Z]+",s.lower()))
3 sparkml

有关spark方面的机器学习的方法,具体可以访问spark官网进行查看。这里给出其相关代码:

from pyspark.ml.feature import RegexTokenizer
regexTokenizer = RegexTokenizer(inputCol="sms_content",outputCol="words",pattern="[^a-zA-Z]+")
regexTokenized = regexTokenizer.transform(dfmale)

到这里就结束了,这是博主的第一篇文档,如果有相关技术没有写好,欢迎各位大佬指出。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5705489.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存