python 使用spark 的算子函数

#-*-coding:UTF-8-*-

from pyspark import SparkConf,SparkContext
import  time

class Spark05Marager(object):

    def __init__(self,master,app_name):
        '''
        构造函数
        :param master: master
        :param app_name:  appname
        '''
        self.__master=master
        self.__app_Name=app_name
        self.__sc=self.__createSc()

    def __createSc(self):
        '''
        创建连接上下文
        :return: 返回连接上下文
        '''
        try:
            conf=SparkConf().setMaster(self.__master).setAppName(self.__app_Name)
            sc=SparkContext(conf=conf)
            return sc
        except Exception as e:
            return None

################################以下是学习算子函数##################################################################

    def my_map(self):
        '''
        map 将一个集合转换成新集合
        :return:
        '''
        data=[1,2,3,4,5,6,7,8,9]
        rdd1=self.__sc.parallelize(data)
        rdd2=rdd1.map(lambda x:x+1)
       
### Spark算子Python中的基本用法 #### 什么是Spark算子? Apache Spark 是一种分布式计算框架,支持大规模数据处理。它提供了丰富的操作接口来实现各种数据转换和动作功能。这些操作被称为 **算子 (Operators)** 或者 **Transformation 和 Action**[^1]。 #### 基本概念 - **Transformation**: 转换操作会基于现有的 RDD 创建一个新的 RDD,但不会立即执行。 - **Action**: 动作操作会触发实际的计算过程并返回结果或者将结果保存到外部存储中。 以下是几个常见的 Transformation 和 Action 的例子: --- #### 使用 `map` 进行简单映射 `map` 算子用于对每个元素应用函数,并返回新的 RDD。 ```python from pyspark import SparkContext sc = SparkContext("local", "Map Example") data = ["apple", "banana", "cherry"] rdd = sc.parallelize(data) result_rdd = rdd.map(lambda x: f"{x}_processed") # 对每个字符串附加 "_processed" output = result_rdd.collect() # 收集结果作为列表 print(output) # 输出:['apple_processed', 'banana_processed', 'cherry_processed'] ``` --- #### 使用 `filter` 过滤数据 `filter` 算子可以用来过滤掉不符合条件的数据项。 ```python filtered_rdd = rdd.filter(lambda x: len(x) > 5) # 只保留长度大于5的单词 output_filtered = filtered_rdd.collect() print(output_filtered) # 输出:['banana', 'cherry'] ``` --- #### 使用 `groupByKey` 处理键值对 当需要按 key 组合多个 value 时,可使用 `groupByKey` 算子。此方法适用于 Key-Value 类型的 RDD 数据结构。 ```python kv_data = [("a", 1), ("b", 2), ("a", 3)] kv_rdd = sc.parallelize(kv_data) grouped_rdd = kv_rdd.groupByKey().mapValues(list) # 将相同key对应的value组合成list output_grouped = grouped_rdd.collect() print(output_grouped) # 输出:[('a', [1, 3]), ('b', [2])] ``` 这里需要注意的是,在某些情况下可能更推荐使用 `reduceByKey` 来代替 `groupByKey`,因为后者可能会导致较大的内存占用[^2]。 --- #### 使用 `countByValue` 计数重复值 如果想统计某个集合里各个唯一值的数量,则可以用 `countByValue()` 方法完成这一需求。 ```python repeated_values = ['python', 'python', 'python', 'java', 'java'] values_rdd = sc.parallelize(repeated_values) counts = values_rdd.countByValue() for k, v in counts.items(): print(f"{k}: {v}") # 输出:python: 3\n java: 2 ``` --- #### 结合多种算子构建复杂逻辑 通过链式调用不同类型的算子,能够轻松解决复杂的业务场景问题。 ```python complex_data = [('spark', 2), ('hadoop', 3), ('hive', 4), ('spark', 6)] complex_rdd = sc.parallelize(complex_data) summed_by_key = complex_rdd.reduceByKey(lambda a,b:a+b).sortByKey() final_result = summed_by_key.collect() print(final_result) # 输出:[('hive', 4), ('hadoop', 3), ('spark', 8)] ``` --- ### 总结 上述展示了部分常用的 PySpark 算子及其具体应用场景。每种算子都有其特定用途以及性能特点,合理选用能极大提升程序效率与代码简洁度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值