Spark 基础函数

创建RDD

根据内容parallelize ():

Line = sc.parallelize(["pandas", "Ilike pandas"])

根据文本文件 textFile():

inputRDD = sc.textFile("log.txt")

映射RDD

一对一映射 map(): 将每个数据项变换后形成新的数据项作为结果

num = sc.parallelize([1,2,3,4])
squared = nums.map(lambda x: x * x).collect()
for num in squared:
	print("%i" % (num))
一对多映射 flatMap():将每个数据项变换后形成多个数据项,然后把所有数据项作为结果

num = sc.parallelize(["1 2","2 3 4"])
words = nums.map(lambda x: x.split(" ")).collect()
for word in words:
	print(word)

过滤RDD filler():

inputRDD = sc.textFile("log.txt")
errorsRDD = inputRDD.filter(lambda x:"error" in x)

合并RDD union():

inputRDD = sc.textFile("log.txt")
errorsRDD = inputRDD.filter(lambda x:"error" in x)
warningRDD = inputRDD.filter(lambda x:"warning" in x)
badLinesRDD = errorsRDD.union(warningRDD)

计算RDD长度 Count()

print( "Inpur had " + badLinesRDD.count() + “ concerning lines”)
读取RDD内容到本地

部分读取 take(Length) 从RDD中读取length条记录到本地

for line in badLinesRDD.take(10):
	print(line)

全部读取 collect()

for line in badLinesRDD.collect():
	print(line)

aggregate() 复杂的reduce

from pyspark import SparkContext, SparkConf

sc = SparkContext("local[2]", "Simple App")

nums = sc.parallelize([1, 2, 3, 4, 5])
sumCount = nums.aggregate((0, 0),
                          (lambda acc, value: (acc[0]+value, acc[1]+1)),
                          (lambda acc1, acc2: (acc1[0]+acc2[0], acc1[1]+acc2[1])))
print(sumCount[0]/float(sumCount[1]))





Spark的count函数用于计算DataFrame或Dataset中的行数。它返回一个Long类型的值,表示行的数量。在使用count函数时,可以对数据进行去重操作,即使用count(distinct column)来计算某一列的唯一值数量。\[1\] 在Spark中,对于count(distinct)的优化,可以使用grouping sets原理。首先,通过expand操作将数据展开,然后以指定的列作为key进行HashAggregate操作,相当于进行了group by操作,从而实现了去重。接下来,可以直接计算count(id)、count(name)等,将数据分而治之,从一定程度上缓解了数据倾斜的问题。\[2\] 总结起来,Spark对count(distinct)的优化是通过展开数据并进行HashAggregate操作来实现去重,然后进行分组计算,从而提高计算效率。\[2\] #### 引用[.reference_title] - *1* *2* [Spark Sql之count(distinct)分析&&学习&&验证](https://blog.csdn.net/Lzx116/article/details/126153664)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Spark基础操作(一)](https://blog.csdn.net/weixin_44275820/article/details/119893892)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值