【博学谷学习记录】超强总结,用心分享|Spark的入门案例-WordCount案例

【博学谷学习记录】超强总结,用心分享|Spark的入门案例-WordCount案例

一、WordCount案例流程实现

在这里插入图片描述

二、WordCount案例代码实现

# Spark程序入门案例:  PySpark在编写的时候, 必须要有程序的入口
# 快捷键:  main + 回车
from pyspark import SparkContext, SparkConf
import os

os.environ['SPARK_HOME'] = '/export/server/spark'
os.environ['PYSPARK_PYTHON'] = '/root/anaconda3/bin/python3'
os.environ['PYSPARK_DRIVER_PYTHON'] = '/root/anaconda3/bin/python3'

if __name__ == '__main__':
    print("pyspark的入门案例: wordcount")

    # 1- 创建Spark Context核心对象(Spark Core 核心对象)
    conf = SparkConf().setAppName("wordcount").setMaster("local[*]")
    sc = SparkContext(conf=conf)

    # 2- 执行相关的操作
    # 2.1 读取外部文件数据
    """
        spark路径写法:  协议 + 路径
            本地路径协议:  file:///
            HDFS路径协议: hdfs://host:port/
        
        注意: 此处的路径, 不能写windows的路径地址, 因为连接的是远程环境, 所以这里的本地路径应该指的是远端的linux本地地址
    """
    path = "file:///export/data/workspace/ky07_spark_parent/_01_spark_base/data/words.txt"
    # 快速返回变量快捷键:  ctrl + alt + v
    rdd_init = sc.textFile(name=path)
    # print(rdd_init.collect())

    # 2.2 对每一行的数据执行切割操作: 一个内容 转换为 多个内容 (一 转 多)
    rdd_flatMap = rdd_init.flatMap(lambda line: line.split(' '))
    # print(rdd_flatMap.collect())

    # 2.3 将每一个单词 转换为(单词,1): 一个单词 转换为一个 kv的键值对(一对一)
    rdd_map = rdd_flatMap.map(lambda word: (word, 1))
    # print(rdd_map.collect())

    # 2.4 根据 key进行分组聚合统计
    """
        lambda agg, curr: agg + curr
        
        参数1(agg) : 表示的局部聚合的结果
        参数2(curr): 表示的每一次遍历的value的值
        
        规则: agg + curr  表示 将每一次遍历的value值不断的累加到agg上
        
        比如说:
            (hive,1),(hive,1),(hive,1),(hive,1),(hive,1),(hive,1)
            reduceByKey: 根据key进行分组, 将相同组的value数据合并
                hive: [1,1,1,1,1,1]
            接下来执行lambda函数: 
                agg 初始值为 value的列表中第一个 也就是 1
                curr: 依次从第二个1 往后遍历即可
            规则: 
                相当于: 新的agg = 原有agg + curr
                
            当遍历完成, agg的值即为当前这个组的最终的结果了
        
    """
    rdd_res = rdd_map.reduceByKey(lambda agg, curr: agg + curr)  # 根据key进行分组, 将相同组的value数据合并, 对value进行聚合计算
    print(rdd_res.collect())
    # 3- 释放资源
    sc.stop();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值