国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Python】PySpark 數(shù)據(jù)計算 ③ ( RDD#reduceByKey 函數(shù)概念 | RDD#reduceByKey 方法工作流程 | RDD#reduceByKey 語法 | 代碼示例 )

這篇具有很好參考價值的文章主要介紹了【Python】PySpark 數(shù)據(jù)計算 ③ ( RDD#reduceByKey 函數(shù)概念 | RDD#reduceByKey 方法工作流程 | RDD#reduceByKey 語法 | 代碼示例 )。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。





一、RDD#reduceByKey 方法




1、RDD#reduceByKey 方法概念


RDD#reduceByKey 方法 是 PySpark 中 提供的計算方法 ,

  • 首先 , 對 鍵值對 KV 類型 RDD 對象 數(shù)據(jù)相同 鍵 key 對應(yīng)的 值 value 進(jìn)行分組 ,
  • 然后 , 按照 開發(fā)者 提供的 算子 ( 邏輯 / 函數(shù) ) 進(jìn)行 聚合操作 ;

上面提到的 鍵值對 KV 型 的數(shù)據(jù) , 指的是 二元元組 , 也就是 RDD 對象中存儲的數(shù)據(jù)是 二元元組 ;

元組 可以看做為 只讀列表 ;

二元元組 指的是 元組 中的數(shù)據(jù) , 只有兩個 , 如 :

("Tom", 18)
("Jerry", 12)

PySpark 中 , 將 二元元組 中

  • 第一個元素 稱為 鍵 Key ,
  • 第二個元素 稱為 值 Value ;

按照 鍵 Key 分組 , 就是按照 二元元組 中的 第一個元素 的值進(jìn)行分組 ;

[("Tom", 18), ("Jerry", 12), ("Tom", 17), ("Jerry", 13)]

將上述列表中的 二元元組 進(jìn)行分組 , 按照 二元元組 第一個元素進(jìn)行分組 ,

  • ("Tom", 18)("Tom", 17) 元組分為一組 , 在這一組中 , 將 18 和 17 兩個數(shù)據(jù)進(jìn)行聚合 , 如 : 相加操作 , 最終聚合結(jié)果是 35 ;
  • ("Jerry", 12)("Jerry", 13) 分為一組 ;

如果 鍵 Key 有 A, B, C 三個 值 Value 要進(jìn)行聚合 , 首先將 A 和 B 進(jìn)行聚合 得到 X , 然后將 X 與 C 進(jìn)行聚合得到新的值 Y ;


具體操作方法是 : 先將相同 鍵 key 對應(yīng)的 值 value 列表中的元素進(jìn)行 reduce 操作 , 返回一個減少后的值,并將該鍵值對存儲在RDD中 ;


2、RDD#reduceByKey 方法工作流程


RDD#reduceByKey 方法 工作流程 : reduceByKey(func) ;

  • 首先 , 對 RDD 對象中的數(shù)據(jù) 分區(qū) , 每個分區(qū)中的相同 鍵 key 對應(yīng)的 值 value 被組成一個列表 ;
  • 然后 , 對于 每個 鍵 key 對應(yīng)的 值 value 列表 , 使用 reduceByKey 方法提供的 函數(shù)參數(shù) func 進(jìn)行 reduce 操作 , 將列表中的元素減少為一個 ;
  • 最后 , 將減少后的 鍵值對 存儲在新的 RDD 對象中 ;

3、RDD#reduceByKey 函數(shù)語法


RDD#reduceByKey 語法 :

reduceByKey(func, numPartitions=None)
  • func 參數(shù) : 用于聚合的函數(shù) ;
  • numPartitions 是可選參數(shù) , 指定 RDD 對象的分區(qū)數(shù) ;

傳入的 func 函數(shù)的類型為 :

(V, V) -> V

V 是泛型 , 指的是任意類型 , 上面的 三個 V 可以是任意類型 , 但是必須是 相同的類型 ;

該函數(shù) 接收 兩個 V 類型的參數(shù) , 參數(shù)類型要相同 , 返回一個 V 類型的返回值 , 傳入的兩個參數(shù)和返回值都是 V 類型的 ;


使用 reduceByKey 方法 , 需要保證函數(shù)的

  • 可結(jié)合性 ( associativity ) : 將兩個具有 相同 參數(shù)類型 和 返回類型 的方法結(jié)合在一起 , 不會改變它們的行為的性質(zhì) ; 兩個方法結(jié)合使用的結(jié)果與執(zhí)行順序無關(guān) ;
  • 可重入性 ( commutativity ) : 在多任務(wù)環(huán)境下 , 一個方法可以被多個任務(wù)調(diào)用 , 而不會出現(xiàn)數(shù)據(jù)競爭或狀態(tài)錯誤的問題 ;

以便在并行計算時能夠正確地聚合值列表 ;





二、代碼示例 - RDD#reduceByKey 方法




1、代碼示例


在下面的代碼中 , 要處理的數(shù)據(jù)是 列表 , 列表元素是 二元元組 ;

[("Tom", 18), ("Tom", 3), ("Jerry", 12), ("Jerry", 21)]

對 值 Value 進(jìn)行的聚合操作就是相加 , 也就是把同一個 鍵 Key 下的多個 Value 值 進(jìn)行相加操作 ,

# 應(yīng)用 reduceByKey 操作,將同一個 Key 下的 Value 相加
rdd2 = rdd.reduceByKey(lambda a, b: a + b)

代碼示例 :

"""
PySpark 數(shù)據(jù)處理
"""

# 導(dǎo)入 PySpark 相關(guān)包
from pyspark import SparkConf, SparkContext
# 為 PySpark 配置 Python 解釋器
import os
os.environ['PYSPARK_PYTHON'] = "D:/001_Develop/022_Python/Python39/python.exe"

# 創(chuàng)建 SparkConf 實(shí)例對象 , 該對象用于配置 Spark 任務(wù)
# setMaster("local[*]") 表示在單機(jī)模式下 本機(jī)運(yùn)行
# setAppName("hello_spark") 是給 Spark 程序起一個名字
sparkConf = SparkConf() \
    .setMaster("local[*]") \
    .setAppName("hello_spark")

# 創(chuàng)建 PySpark 執(zhí)行環(huán)境 入口對象
sparkContext = SparkContext(conf=sparkConf)

# 打印 PySpark 版本號
print("PySpark 版本號 : ", sparkContext.version)

# 將 字符串列表 轉(zhuǎn)為 RDD 對象
rdd = sparkContext.parallelize([("Tom", 18), ("Tom", 3), ("Jerry", 12), ("Jerry", 21)])

# 應(yīng)用 reduceByKey 操作,將同一個 Key 下的 Value 相加
rdd2 = rdd.reduceByKey(lambda a, b: a + b)

# 打印新的 RDD 中的內(nèi)容
print(rdd2.collect())

# 停止 PySpark 程序
sparkContext.stop()



2、執(zhí)行結(jié)果


D:\001_Develop\022_Python\Python39\python.exe D:/002_Project/011_Python/HelloPython/Client.py
23/08/01 10:16:04 WARN Shell: Did not find winutils.exe: java.io.FileNotFoundException: java.io.FileNotFoundException: HADOOP_HOME and hadoop.home.dir are unset. -see https://wiki.apache.org/hadoop/WindowsProblems
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
23/08/01 10:16:04 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
PySpark 版本號 :  3.4.1
D:\001_Develop\022_Python\Python39\Lib\site-packages\pyspark\python\lib\pyspark.zip\pyspark\shuffle.py:65: UserWarning: Please install psutil to have better support with spilling
D:\001_Develop\022_Python\Python39\Lib\site-packages\pyspark\python\lib\pyspark.zip\pyspark\shuffle.py:65: UserWarning: Please install psutil to have better support with spilling
D:\001_Develop\022_Python\Python39\Lib\site-packages\pyspark\python\lib\pyspark.zip\pyspark\shuffle.py:65: UserWarning: Please install psutil to have better support with spilling
D:\001_Develop\022_Python\Python39\Lib\site-packages\pyspark\python\lib\pyspark.zip\pyspark\shuffle.py:65: UserWarning: Please install psutil to have better support with spilling
D:\001_Develop\022_Python\Python39\Lib\site-packages\pyspark\python\lib\pyspark.zip\pyspark\shuffle.py:65: UserWarning: Please install psutil to have better support with spilling
[('Jerry', 33), ('Tom', 21)]

Process finished with exit code 0

【Python】PySpark 數(shù)據(jù)計算 ③ ( RDD#reduceByKey 函數(shù)概念 | RDD#reduceByKey 方法工作流程 | RDD#reduceByKey 語法 | 代碼示例 ),Python,python,Spark,PySpark,PyCharm,reduceByKey,原力計劃





三、代碼示例 - 使用 RDD#reduceByKey 統(tǒng)計文件內(nèi)容




1、需求分析


給定一個 文本文件 word.txt , 文件內(nèi)容為 :

Tom Jerry
Tom Jerry Tom
Jack Jerry

【Python】PySpark 數(shù)據(jù)計算 ③ ( RDD#reduceByKey 函數(shù)概念 | RDD#reduceByKey 方法工作流程 | RDD#reduceByKey 語法 | 代碼示例 ),Python,python,Spark,PySpark,PyCharm,reduceByKey,原力計劃

讀取文件中的內(nèi)容 , 統(tǒng)計文件中單詞的個數(shù) ;

思路 :

  • 讀取數(shù)據(jù)到 RDD 中 ,
  • 然后 按照空格分割開 再展平 , 獲取到每個單詞 ,
  • 根據(jù)上述單詞列表 , 生成一個 二元元組 列表 , 列表中每個元素的 鍵 Key 為單詞 , 值 Value 為 數(shù)字 1 ,
  • 對上述 二元元組 列表 進(jìn)行 聚合操作 , 相同的 鍵 Key 對應(yīng)的 值 Value 進(jìn)行相加 ;

2、代碼示例


首先 , 讀取文件 , 將 文件轉(zhuǎn)為 RDD 對象 , 該 RDD 對象中 , 列表中的元素是 字符串 類型 , 每個字符串的內(nèi)容是 整行的數(shù)據(jù) ;

# 將 文件 轉(zhuǎn)為 RDD 對象
rdd = sparkContext.textFile("word.txt")
# 內(nèi)容為 ['Tom Jerry', 'Tom Jerry Tom', 'Jack Jerry']

然后 , 通過 flatMap 展平文件, 先按照 空格 切割每行數(shù)據(jù)為 字符串 列表 , 然后展平數(shù)據(jù)解除嵌套 ;

# 通過 flatMap 展平文件, 先按照 空格 切割每行數(shù)據(jù)為 字符串 列表
#   然后展平數(shù)據(jù)解除嵌套
rdd2 = rdd.flatMap(lambda element: element.split(" "))
# 內(nèi)容為 : ['Tom', 'Jerry', 'Tom', 'Jerry', 'Tom', 'Jack', 'Jerry']

再后 , 將 rdd 數(shù)據(jù) 的 列表中的元素 轉(zhuǎn)為二元元組 , 第一個元素設(shè)置為 單詞 字符串 , 第二個元素設(shè)置為 1

# 將 rdd 數(shù)據(jù) 的 列表中的元素 轉(zhuǎn)為二元元組, 第二個元素設(shè)置為 1
rdd3 = rdd2.map(lambda element: (element, 1))
# 內(nèi)容為 [('Tom', 1), ('Jerry', 1), ('Tom', 1), ('Jerry', 1), ('Tom', 1), ('Jack', 1), ('Jerry', 1)]

最后 , 應(yīng)用 reduceByKey 操作 , 對相同 鍵 Key 對應(yīng)的 值 Value 進(jìn)行聚合操作 , 將同一個 Key 下的 Value 相加, 也就是統(tǒng)計 鍵 Key 的個數(shù) ;

# 應(yīng)用 reduceByKey 操作,
#   將同一個 Key 下的 Value 相加, 也就是統(tǒng)計 鍵 Key 的個數(shù)
rdd4 = rdd3.reduceByKey(lambda a, b: a + b)
# [('Tom', 3), ('Jack', 1), ('Jerry', 3)]

代碼示例 :

"""
PySpark 數(shù)據(jù)處理
"""

# 導(dǎo)入 PySpark 相關(guān)包
from pyspark import SparkConf, SparkContext
# 為 PySpark 配置 Python 解釋器
import os
os.environ['PYSPARK_PYTHON'] = "D:/001_Develop/022_Python/Python39/python.exe"

# 創(chuàng)建 SparkConf 實(shí)例對象 , 該對象用于配置 Spark 任務(wù)
# setMaster("local[*]") 表示在單機(jī)模式下 本機(jī)運(yùn)行
# setAppName("hello_spark") 是給 Spark 程序起一個名字
sparkConf = SparkConf() \
    .setMaster("local[*]") \
    .setAppName("hello_spark")

# 創(chuàng)建 PySpark 執(zhí)行環(huán)境 入口對象
sparkContext = SparkContext(conf=sparkConf)

# 打印 PySpark 版本號
print("PySpark 版本號 : ", sparkContext.version)

# 將 文件 轉(zhuǎn)為 RDD 對象
rdd = sparkContext.textFile("word.txt")
print("查看文件內(nèi)容 : ", rdd.collect())

# 通過 flatMap 展平文件, 先按照 空格 切割每行數(shù)據(jù)為 字符串 列表
#   然后展平數(shù)據(jù)解除嵌套
rdd2 = rdd.flatMap(lambda element: element.split(" "))
print("查看文件內(nèi)容展平效果 : ", rdd2.collect())

# 將 rdd 數(shù)據(jù) 的 列表中的元素 轉(zhuǎn)為二元元組, 第二個元素設(shè)置為 1
rdd3 = rdd2.map(lambda element: (element, 1))
print("轉(zhuǎn)為二元元組效果 : ", rdd3.collect())

# 應(yīng)用 reduceByKey 操作,
#   將同一個 Key 下的 Value 相加, 也就是統(tǒng)計 鍵 Key 的個數(shù)
rdd4 = rdd3.reduceByKey(lambda a, b: a + b)
print("最終統(tǒng)計單詞 : ", rdd4.collect())

# 停止 PySpark 程序
sparkContext.stop()


執(zhí)行結(jié)果 :

D:\001_Develop\022_Python\Python39\python.exe D:/002_Project/011_Python/HelloPython/Client.py
23/08/01 11:25:24 WARN Shell: Did not find winutils.exe: java.io.FileNotFoundException: java.io.FileNotFoundException: HADOOP_HOME and hadoop.home.dir are unset. -see https://wiki.apache.org/hadoop/WindowsProblems
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
23/08/01 11:25:24 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
PySpark 版本號 :  3.4.1
查看文件內(nèi)容 :  ['Tom Jerry', 'Tom Jerry Tom', 'Jack Jerry']
查看文件內(nèi)容展平效果 :  ['Tom', 'Jerry', 'Tom', 'Jerry', 'Tom', 'Jack', 'Jerry']
轉(zhuǎn)為二元元組效果 :  [('Tom', 1), ('Jerry', 1), ('Tom', 1), ('Jerry', 1), ('Tom', 1), ('Jack', 1), ('Jerry', 1)]
D:\001_Develop\022_Python\Python39\Lib\site-packages\pyspark\python\lib\pyspark.zip\pyspark\shuffle.py:65: UserWarning: Please install psutil to have better support with spilling
D:\001_Develop\022_Python\Python39\Lib\site-packages\pyspark\python\lib\pyspark.zip\pyspark\shuffle.py:65: UserWarning: Please install psutil to have better support with spilling
D:\001_Develop\022_Python\Python39\Lib\site-packages\pyspark\python\lib\pyspark.zip\pyspark\shuffle.py:65: UserWarning: Please install psutil to have better support with spilling
D:\001_Develop\022_Python\Python39\Lib\site-packages\pyspark\python\lib\pyspark.zip\pyspark\shuffle.py:65: UserWarning: Please install psutil to have better support with spilling
最終統(tǒng)計單詞 :  [('Tom', 3), ('Jack', 1), ('Jerry', 3)]

Process finished with exit code 0

【Python】PySpark 數(shù)據(jù)計算 ③ ( RDD#reduceByKey 函數(shù)概念 | RDD#reduceByKey 方法工作流程 | RDD#reduceByKey 語法 | 代碼示例 ),Python,python,Spark,PySpark,PyCharm,reduceByKey,原力計劃文章來源地址http://www.zghlxwxcb.cn/news/detail-623052.html

到了這里,關(guān)于【Python】PySpark 數(shù)據(jù)計算 ③ ( RDD#reduceByKey 函數(shù)概念 | RDD#reduceByKey 方法工作流程 | RDD#reduceByKey 語法 | 代碼示例 )的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Python大數(shù)據(jù)之PySpark(五)RDD詳解

    Python大數(shù)據(jù)之PySpark(五)RDD詳解

    為什么需要RDD? 首先Spark的提出為了解決MR的計算問題,諸如說迭代式計算,比如:機(jī)器學(xué)習(xí)或圖計算 希望能夠提出一套基于內(nèi)存的迭代式數(shù)據(jù)結(jié)構(gòu),引入RDD彈性分布式數(shù)據(jù)集,如下圖 為什么RDD是可以容錯? RDD依靠于依賴關(guān)系dependency relationship reduceByKeyRDD-----mapRDD-----flatMapRD

    2024年02月06日
    瀏覽(50)
  • Python大數(shù)據(jù)之PySpark(六)RDD的操作

    Python大數(shù)據(jù)之PySpark(六)RDD的操作

    函數(shù)分類 *Transformation操作只是建立計算關(guān)系,而Action 操作才是實(shí)際的執(zhí)行者* 。 Transformation算子 轉(zhuǎn)換算子 操作之間不算的轉(zhuǎn)換,如果想看到結(jié)果通過action算子觸發(fā) Action算子 行動算子 觸發(fā)Job的執(zhí)行,能夠看到結(jié)果信息 Transformation函數(shù) 值類型valueType map flatMap filter mapValue 雙值

    2024年02月04日
    瀏覽(44)
  • 大數(shù)據(jù)之PySpark的RDD介紹

    大數(shù)據(jù)之PySpark的RDD介紹

    之前的文章主要介紹Spark基礎(chǔ)知識,例如集群角色、Spark集群運(yùn)行流程等,接下來會進(jìn)一步討論Spark相對核心的知識,讓我們拭目以待,同時也期待各位的精彩留言! RDD稱為彈性分布式數(shù)據(jù)集,是Spark中最基本的數(shù)據(jù)抽象,其為一個不可變、可分區(qū)、元素可并行計算的集合;

    2024年02月03日
    瀏覽(18)
  • PySpark大數(shù)據(jù)教程:深入學(xué)習(xí)SparkCore的RDD持久化和Checkpoint

    PySpark大數(shù)據(jù)教程:深入學(xué)習(xí)SparkCore的RDD持久化和Checkpoint

    本教程詳細(xì)介紹了PySpark中SparkCore的RDD持久化和Checkpoint功能,重點(diǎn)講解了緩存和檢查點(diǎn)的作用、如何進(jìn)行緩存、如何設(shè)置檢查點(diǎn)目錄以及它們之間的區(qū)別。還提供了join操作的示例和Spark算子補(bǔ)充知識。

    2024年02月08日
    瀏覽(57)
  • 003-90-09【RDD-Actions】法華寺山門前梅林深處許姓人家女兒小白用GPT學(xué)習(xí)Spark的reduce && reduceByKey

    在Spark中,reduce是一個RDD的動作(action),它用于對RDD中的元素進(jìn)行聚合操作。reduce將RDD中的元素按照指定的聚合函數(shù)進(jìn)行迭代計算,并返回一個聚合后的結(jié)果。 以下是reduce操作的Scala示例: 輸出結(jié)果: 在上述示例中,我們首先創(chuàng)建了一個輸入RDD,其中包含整數(shù)序列1到5。然

    2024年01月19日
    瀏覽(81)
  • PySpark基礎(chǔ) —— RDD

    PySpark基礎(chǔ) —— RDD

    1.查看Spark環(huán)境信息 2.創(chuàng)建RDD 創(chuàng)建RDD主要有兩種方式 第一種:textFile方法 第二種:parallelize方法 ?2.1.textFile方法 本地文件系統(tǒng)加載數(shù)據(jù) ?2.2.parallelize方法 ?2.3.wholeTextFiles方法 Action動作算子/行動操作 1.collect 2.take ?3.first 4.top 5.takeOrdered 6.takeSample 7.count 8.sum 9.histogram 10.fold 11.re

    2024年02月07日
    瀏覽(23)
  • PySpark RDD的緩存和Checkpoint

    PySpark RDD的緩存和Checkpoint

    RDD之間進(jìn)行相互迭代計算(Transformation的轉(zhuǎn)換),當(dāng)執(zhí)行開啟后,新RDD的生成,代表老RDD的消息,RDD的數(shù)據(jù)只在處理的過程中存在,一旦處理完成,就不見了,所以RDD的數(shù)據(jù)是過程數(shù)據(jù)。 RDD數(shù)據(jù)是過程數(shù)據(jù)的這個特性可以最大化的利用資源,老舊的RDD沒用了就會從內(nèi)存中清理

    2023年04月09日
    瀏覽(16)
  • PySpark之RDD的持久化

    PySpark之RDD的持久化

    當(dāng)RDD被重復(fù)使用,或者計算該RDD比較容易出錯,而且需要消耗比較多的資源和時間的時候,我們就可以將該RDD緩存起來。 主要作用: 提升Spark程序的計算效率 注意事項: RDD的緩存可以存儲在內(nèi)存或者是磁盤上,甚至可以存儲在Executor進(jìn)程的堆外內(nèi)存中。主要是放在內(nèi)存中,因此

    2024年01月23日
    瀏覽(16)
  • 10-用PySpark建立第一個Spark RDD

    10-用PySpark建立第一個Spark RDD

    PySpark實(shí)戰(zhàn)筆記系列第一篇 Apache Spark的核心組件的基礎(chǔ)是RDD。所謂的RDD,即 彈性分布式數(shù)據(jù)集(Resiliennt Distributed Datasets) ,基于RDD可以實(shí)現(xiàn)Apache Spark各個組件在多個計算機(jī)組成的集群中進(jìn)行無縫集成,從而能夠在一個應(yīng)用程序中完成海量數(shù)據(jù)處理。 只讀不能修改 :只能通過

    2024年04月08日
    瀏覽(47)
  • Spark的reduceByKey方法使用

    Spark的reduceByKey方法使用

    在ODPS上我們有如下數(shù)據(jù): id category_id attr_id attr_name attr_value 205348 10000046 2 最優(yōu)粘度 [\\\"0W-40\\\"] 205348 10000046 1 基礎(chǔ)油類型 [\\\"全合成\\\"] 205348 10000046 3 級別 [\\\"BMW Longlife 01\\\"] 我們希望得到的結(jié)果如下: (205348,?10000046, \\\"基礎(chǔ)油類型:全合成n最優(yōu)粘度:0W-40n級別:BMW Longlife 01n\\\") 需求解讀

    2024年04月15日
    瀏覽(62)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包