大数据体系知识学习(二):WordCount案例实现及错误总结

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 这篇文章介绍了如何使用PySpark进行WordCount操作,包括环境配置、代码实现、运行结果和遇到的错误。作者在运行过程中遇到了Py4JJavaError和JAVA_HOME未设置的问题,并通过导入findspark初始化和设置环境变量解决了这些问题。文章还讨论了groupByKey和reduceByKey的区别。

1. 当前环境

pyspark:版本号为3.1.2
JAVA_JDK: 版本号为1.8.0_333
Hadoop: 版本号为3.3.0

2. 相关信息

2.1 相关文件

words.txt如下

hello world hello hadoop
hadoop hello world hive
hive hive hadoop

2.2 相关流程

请添加图片描述

3. 运行代码

# spark入门案例 ---  WordCount

from pyspark import SparkContext,SparkConf
import findspark
findspark.init()

if __name__ == '__main__':
    print("spark入门案例 ---  WordCount")

    # 1) 创建 sparkContext对象
    conf = SparkConf().setMaster("local[*]").setAppName("WordCount")
    # 自动返回 变量:  ctrl +atl + v
    sc = SparkContext(conf=conf)

    # 2) 读取文件数据  file是调用本地文件
    rdd_init = sc.textFile("file:///F:\python\学习\Spark/file/words.txt")

    # 3) 对数据执行切割操作: 得到 ['hello', 'world', 'hello', 'hadoop', 'hadoop', 'hello', 'world', 'hive', 'hive', 'hive', 'hadoop']
    rdd_flatMap = rdd_init.flatMap(lambda line:line.split(' ')) # 一个对多个flatMap

    # 4) 对数据转换为  单词,1 操作
    # [('hello', 1), ('world', 1), ('hello', 1), ('hadoop', 1), ('hadoop', 1), ('hello', 1), ('world', 1), ('hive', 1), ('hive', 1), ('hive', 1), ('hadoop', 1)]
    rdd_map = rdd_flatMap.map(lambda word: (word,1)) # 一个对一个 map

    # 5,6) 对数据执行分组操作 统计求和操作 groupByKey是指根据key完成自动分组 reduceByKey是指根据key来做聚合
    # 从Shuffle的角度:
    #      groupByKey和reduceByKey都存在shuffle的操作,但是reduceByKey可以在shuffle之前对分区内相同key的数据集进行预聚合
    #      (combine),这样会减少落盘的数据量,而groupByKey只是进行分组,不存在数据量减少的问题,reduceByKey性能比较高。
    # 从功能的角度:
    #      reduceByKey其实包含分组和聚合的功能;groupByKey只能分组,不能聚合,所以在分组聚合的场合下,
    #      推荐使用reduceByKey,如果仅仅是分组而不需要聚合,那么还是只能使用groupByKey。
    rdd_res = rdd_map.reduceByKey(lambda agg, curr: agg + curr)

    # 7) 输出: 打印
    print(rdd_res.collect())

    # 8) 关闭 sparkContext对象
    sc.stop()

4. 运行结果

在这里插入图片描述

5. 运行错误情况

5.1 py4j.protocol.Py4JJavaError

错误截图
在这里插入图片描述
错误原因
因为转载时间过长找不到spark所以报错

解决办法

import findspark
findspark.init()

5.2 JAVA_HOME is not set

出现位置: 当pycharm采用SSH连接远程Python环境时, 启动执行spark程序可能报出原因: 加载不到jdk的位置

解决方案:

  • 第一步: 可以在linux的 /root/.bashrc 文件中, 添加以下两行内容 (注意需要三台都添加)
export JAVA_HOME=/export/server/jdk1.8.0_241              
export PYSPARK_PYTHON=/root/anaconda3/bin/python
  • 第二步: 在代码中, 指定linux中spark所在目录, spark中配置文件, 即可自动加载到: 锁定远端操作环境, 避免存在多个版本环境的问题
os.environ['SPARK_HOME'] = '/export/server/spark'               
os.environ["PYSPARK_PYTHON"]="/root/anaconda3/bin/python"               
os.environ["PYSPARK_DRIVER_PYTHON"]="/root/anaconda3/bin/python"
相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
目录
相关文章
|
2月前
|
数据采集 数据可视化 大数据
大数据体系知识学习(三):数据清洗_箱线图的概念以及代码实现
这篇文章介绍了如何使用Python中的matplotlib和numpy库来创建箱线图,以检测和处理数据集中的异常值。
57 1
大数据体系知识学习(三):数据清洗_箱线图的概念以及代码实现
|
2月前
|
SQL 分布式计算 NoSQL
大数据-164 Apache Kylin Cube优化 案例1 定义衍生维度与对比 超详细
大数据-164 Apache Kylin Cube优化 案例1 定义衍生维度与对比 超详细
35 1
大数据-164 Apache Kylin Cube优化 案例1 定义衍生维度与对比 超详细
|
2月前
|
存储 SQL 分布式计算
大数据学习
【10月更文挑战第15天】
49 1
|
2月前
|
分布式计算 Hadoop 大数据
大数据体系知识学习(一):PySpark和Hadoop环境的搭建与测试
这篇文章是关于大数据体系知识学习的,主要介绍了Apache Spark的基本概念、特点、组件,以及如何安装配置Java、PySpark和Hadoop环境。文章还提供了详细的安装步骤和测试代码,帮助读者搭建和测试大数据环境。
67 1
|
2月前
|
消息中间件 存储 druid
大数据-156 Apache Druid 案例实战 Scala Kafka 订单统计
大数据-156 Apache Druid 案例实战 Scala Kafka 订单统计
44 3
|
2月前
|
存储 大数据 分布式数据库
大数据-165 Apache Kylin Cube优化 案例 2 定义衍生维度及对比 & 聚合组 & RowKeys
大数据-165 Apache Kylin Cube优化 案例 2 定义衍生维度及对比 & 聚合组 & RowKeys
45 1
|
2月前
|
消息中间件 druid 大数据
大数据-153 Apache Druid 案例 从 Kafka 中加载数据并分析(二)
大数据-153 Apache Druid 案例 从 Kafka 中加载数据并分析(二)
35 2
|
2月前
|
消息中间件 分布式计算 druid
大数据-153 Apache Druid 案例 从 Kafka 中加载数据并分析(一)
大数据-153 Apache Druid 案例 从 Kafka 中加载数据并分析(一)
56 1
|
25天前
|
存储 分布式计算 数据挖掘
数据架构 ODPS 是什么?
数据架构 ODPS 是什么?
210 7
|
25天前
|
存储 分布式计算 大数据
大数据 优化数据读取
【11月更文挑战第4天】
39 2