PySpark学习笔记—案例学习

# 搜索引擎日志分析案例
from pyspark import SparkConf, SparkContext
from operator import add
import jieba
from pyspark.storagelevel import StorageLevel

conf = SparkConf().setAppName("SougouQ").setMaster('local[*]')
sc = SparkContext(conf=conf)
# 读取数据文件
input_file = "../pySpark/data/SogouQ.txt"
file_rdd = sc.textFile(input_file)
# 将数据按照\t进行切分,使每一条数据形成一个元组
split_rdd = file_rdd.map(lambda line: line.split('\t'))
# split_rdd会被多次使用,因此需要对其进行优化,如缓存后者CheckPoint都可以
split_rdd.persist(StorageLevel.DISK_ONLY)
# TODO:需求1,用于搜索关键词分析
# 将所有的搜索内容取出
context_rdd = split_rdd.map(lambda x: x[2])
# 对搜索内存进行分词处理
def context_jieba(data):
    """通过jieba分词工具进行分词操作"""
    seg = jieba.cut_for_search(data)
    l = list()
    for word in seg:
        l.append(word)
    return l


words_rdd = context_rdd.flatMap(context_jieba)
final_words_rdd = words_rdd.map(lambda x: (x, 1))
# 进行单词的计数、分组、排序
result = final_words_rdd.reduceByKey(lambda a, b: a + b).sortBy(lambda x: x[1], ascending=False, numPartitions=1)
print("需求1结果:", result.collect())

# TODO: 需求2:用户和关键词组合分区
# 提取出来用户的ID和搜索内容(用户ID和搜索内容)
user_content_rdd = split_rdd.map(lambda x: (x[1], x[2]))
# 对用户的搜索内容进行分词,分词后和用户ID进行组合


def extract_user_and_word(data):
    """传入数据,返回(ID,分词结果)"""
    user_id = data[0]
    content = data[1]
    # 对内容content进行分词处理
    words = context_jieba(content)
    return_list = list()
    for word in words:
        # 对用户ID进行组合
        return_list.append((user_id + "_" + word, 1))
    return return_list


user_word_rdd = user_content_rdd.flatMap(extract_user_and_word)
# 分组聚合排序
result2 = user_word_rdd.reduceByKey(lambda a, b: a + b).sortBy(lambda x: x[1], ascending=False, numPartitions=1).take(5)
print("需求2结果:", result2)

# TODO:需求3:热门搜索时间段分析
# 取出来数据中的时间
time_rdd = split_rdd.map(lambda x: x[0])
# 对时间进行处理,只保留小数精度
hour_with_rdd = time_rdd.map(lambda x: (x.split(":")[0], 1))
# 单词技术逻辑
result3 = hour_with_rdd.reduceByKey(add).sortBy(lambda x: x[1], ascending=False, numPartitions=1)
print("需求3结果:", result3.collect())
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值