pyspark 库
1、 获取SparkContext
conf = SparkConf().setMaster("local[*]").setAppName("wordCountHelloWorld")
sc = SparkContext(conf=conf)
2、RDD创建
# 并行化创建,默认分区数为16
rdd = sc.parallelize(本地数据集,分区数)
rdd.getNumPartitions() # 获取默认分区数量
rdd.collect() # 将分布式对象发送到driver中形成一个本地集合对象
读取文件创建:
sc.textFile(文件路劲)
sc.wholeTextFile() # 小文件读取
3、 算子(方法)
3.1 转换算子: 返回值为rdd
# 对每一条进行处理,函数接受值为每一项,返回值为处理后的结果
map(func)
# 在map的基础上解除嵌套,变为一维
flatMap(func)
''' 根据key分组聚合value,函数接受两个数据,
第一个参数为上一次聚合结果,第二个参数为本次的值'''
reduceByKey(func)
''' 针对二元元祖对value进行map操作,
函数参数为每一项数据的value,返回值为新value'''
mapValues(func)
# 分组,函数返回值值为分组字段
groupBy(func)
# 返回值true保留,false丢弃
fileter(func)
# 去重
distinct()
# 合并两个算子
union(rdd1,rdd2)
# 对两个算子执行关联
join()
leftOuterJoin()
# 交集
intersection()
# 分区嵌套
glom()
# 针对kv型数据,根据key进行分组
groupByKey()
'''排序,ascending指定排序规则true为升序,func指定排序字段,numPartitions制定排序分区'''
sortBy(func,ascending=true,numPartitions=1)
# 按照key排序,func对key进行排序时操作
sortByKey(ascending=true,numPartitions=1,func)
3.2 action算子
# 统计key出现的次数
countByKey(key)
# 将数据统一收取到driver中,形成一个list集合
collect()
# 聚合后返回聚合结果
reduce(func)
# 有初始值的聚合
fold(初始值,func)
#获取第一个值
first()
# 获取前n个值
take(n)
top(n) # 最大前n个
count() # 统计元素个数
# 随机取数据
takeSample(是否重复数据,多少个,随机种子)
# 指定排序规则取前n个
takeOrdered(n,func)
# 对每个元素进行操作,无返回值
foreach(func)
# 写入到文本
saveAsTextFile("文件路劲")
# 一次网络io处理和map用法一致,操作效率更高
mapPartitions(func)
foreachPartition(func)
# 自定义分区func为自定义分区返回数字
partitionBy(分区号,func)
# 重新分区
repartition(n)
3.3 算子缓存
# 缓存,通过内存
rdd.cache()
# 清理缓存
rdd.unpersist()
# 保存,硬盘
sc.setCheckpointDir("hdfs://node11:8080/spark")
rdd.checkpoint()
累加器
获取累加器变量
acumula = sc.accumulator(0)
广播变量
# 将本地list,标记成广播变量即可
broadcast = sc.broadcast(list)
# 使用网络变量
value = broadcast.value