【博学谷学习记录】超强总结,用心分享|Spark的入门案例-从HDFS上读取文件并实现排序

该文详细介绍了使用PySpark从HDFS读取words.txt文件,实现WordCount案例,包括链式编程统计单词频率,以及对结果进行排序的操作。最后,文章展示了如何将统计结果输出到HDFS。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【博学谷学习记录】超强总结,用心分享|Spark的入门案例-从HDFS上读取文件并实现排序

一、上传一个words.txt文件到HDFS中

vim words.txt

输入 i 进入插入模式
添加以下内容:
hadoop hive zookeeper hive hadoop
hadoop hadoop sqoop hive sqoop
hive sqoop sqoop hive hive
hadoop hive sqoop zookeeper

上传到HDFS
hdfs dfs -mkdir -p /pyspark/wd/input
hdfs dfs -put words.txt /pyspark/wd/input

二、从HDFS上读取文件, 完成WordCount案例实现(链式编程)

import os

from pyspark import SparkContext, SparkConf

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("wordcount案例实现: 链式编程")

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

    # 2. 执行相关的操作
    res = sc.textFile(name="hdfs://node1:8020/pyspark/wd/input/words.txt")\
        .flatMap(lambda line: line.split())\
        .map(lambda word:(word,1))\
        .reduceByKey(lambda agg,curr: agg+ curr).collect()

    print(res)
    # 3. 释放资源
    sc.stop()

三、从HDFS中读取数据, 并且对结果数据进行排序操作

import os

from pyspark import SparkContext, SparkConf

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的入门案例: 从HDFS中读取数据并对结果数据进行排序")

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

    sc = SparkContext(conf=conf)

    # 2- 执行相关的操作
    # 2.1 从 HDFS中读取数据
    path = "hdfs://node1:8020/pyspark/wd/input/words.txt"
    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)
    rdd_map = rdd_flatMap.map(lambda word: (word, 1))
    #print(rdd_map.collect())

    # 2.4  根据 key进行分组聚合统计
    rdd_res = rdd_map.reduceByKey(lambda agg, curr: agg + curr)

    # 2.5 对 rdd_res的结果数据进行排序操作
    # 第一种排序
    #rdd_sort = rdd_res.sortBy(lambda res_tuple: res_tuple[1],ascending=False)
    # 第二种排序
    #rdd_reverseMap = rdd_res.map(lambda res_tuple: (res_tuple[1], res_tuple[0]))
    #rdd_sort = rdd_reverseMap.sortByKey(ascending=False)
    #rdd_map = rdd_sort.map(lambda res_revTuple:(res_revTuple[1],res_revTuple[0]))

    # 第三种排序操作:
    # top: 如果类型为kv的数据, 默认对 key执行排序操作, 如果想要对value进行排序, 需要指定排序字段
    # top 只能倒序排序
    res = rdd_res.top(5,lambda res_tuple:res_tuple[1])

    print(res)

    # 3- 释放资源
    sc.stop()

四、将统计的结果进行输出操作

import os

from pyspark import SparkContext, SparkConf

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的入门案例: 从HDFS中读取数据")

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

    sc = SparkContext(conf=conf)

    # 2- 执行相关的操作
    # 2.1 从 HDFS中读取数据
    path = "hdfs://node1:8020/pyspark/wd/input/words.txt"
    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)
    rdd_map = rdd_flatMap.map(lambda word: (word, 1))
    #print(rdd_map.collect())

    # 2.4  根据 key进行分组聚合统计
    rdd_res = rdd_map.reduceByKey(lambda agg, curr: agg + curr)


    # 3- 将处理后的结果进行输出到HDFS的 /pyspark/wd/output
    rdd_res.saveAsTextFile(path="hdfs://node1:8020/pyspark/wd/output")

    # 4- 释放资源
    sc.stop()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值