Python--PySpark 综合案例笔记

环境配置

  1. Python环境:指定Python解释器路径。
    os.environ['PYSPARK_PYTHON'] = '/export/server/anaconda3/bin/python'
    
  2. Hadoop环境:指定Hadoop安装路径。
    os.environ['HADOOP_HOME'] = "/export/server/hadoop-3.3.1"
    
SparkContext 初始化
  1. 配置SparkConf
    • 设置应用名称。
    • 设置默认并行度为24,适合集群模式。
    conf = SparkConf().setAppName("spark_cluster")
    conf.set("spark.default.parallelism", "24")
    
  2. 创建SparkContext
    sc = SparkContext(conf=conf)
    
需求实现
需求1:热门搜索时间段Top3(小时精度)
  1. 读取文件:将文件内容读取为RDD。
    file_rdd = sc.textFile("hdfs://m1:8020/data/search_log.txt")
    
  2. 处理数据
    • 取出时间并转换为小时。
    • 转换为(小时, 1)的二元组。
    • Key分组聚合Value。
    • 排序(降序)。
    • 取前3。
    result1 = file_rdd.map(lambda x: (x.split("\t")[0][:2], 1)).\
        reduceByKey(lambda a, b: a + b).\ 
        sortBy(lambda x: x[1], ascending=False, numPartitions=1).\ 
        take(3)
    print("需求1的结果:", result1)
    
需求2:热门搜索词Top3
  1. 处理数据
    • 取出搜索词。
    • 转换为(词, 1)的二元组。
    • 分组聚合。
    • 排序。
    • Top3。
    result2 = file_rdd.map(lambda x: (x.split("\t")[2], 1)).\
        reduceByKey(lambda a, b: a + b).\ 
        sortBy(lambda x: x[1], ascending=False, numPartitions=1).\ 
        take(3)
    print("需求2的结果:", result2)
    
需求3:统计“黑马程序员”关键字在什么时段被搜索的最多
  1. 处理数据
    • 过滤内容,只保留“黑马程序员”关键词。
    • 转换为(小时, 1)的二元组。
    • Key分组聚合Value。
    • 排序(降序)。
    • 取前1。
    result3 = file_rdd.map(lambda x: x.split("\t")).\
        filter(lambda x: x[2] == '黑马程序员').\
        map(lambda x: (x[0][:2], 1)).\
        reduceByKey(lambda a, b: a + b).\ 
        sortBy(lambda x: x[1], ascending=False, numPartitions=1).\ 
        take(1)
    print("需求3的结果:", result3)
    
需求4:将数据转换为JSON格式,写出到文件中
  1. 转换为JSON格式的RDD
    • 将每行数据转换为字典格式。
    • 转换为JSON字符串。
    file_rdd.map(lambda x: x.split("\t")).\
        map(lambda x: {"time": x[0], "user_id": x[1], "key_word": x[2], "rank1": x[3], "rank2": x[4], "url": x[5]}).\ 
        saveAsTextFile("hdfs://m1:8020/output/output_json")
    
总结
  • 数据读取:使用textFile方法读取HDFS上的文本文件。
  • 数据处理:通过mapfilterreduceByKeysortBy等方法进行数据转换和聚合。
  • 结果输出:使用take方法获取结果,使用saveAsTextFile方法将结果写入HDFS上的文件。
  • 注意事项
    • 在集群模式下,设置合适的并行度可以提高数据处理效率。
    • 使用numPartitions=1确保数据在单个分区中进行排序和聚合,避免数据在多个分区中分布导致的不一致性。
    • 将数据转换为JSON格式时,确保每个字段都正确映射到字典中。

通过这个案例,可以深入理解PySpark的基本操作和数据处理流程,为更复杂的大数据处理任务打下基础。

  • 25
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值