pyspark

pyspark

固定流程

"""
 演示pyspark
"""
​
# 导包
from pyspark import SparkConf, SparkContext
# 创建SparkConf对象
conf = SparkConf().setMaster("local[*]").setAppName("test_spark_app")
# 基于SparkConf创建SparkContext对象
sc = SparkContext(conf=conf)
#打印PySpark的运行版本
print(sc)
#停止
sc.stop()

数据输入
RDD对象

RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象,是spark core的底层核心,它代表一个不可变、可分区、里面的元素可并行计算的集合。

数据输入

通过SparkContext对象调用parallelize方法将Python对象加载到Spark内,成为RDD对象

可以添加Python以下类型

  • list

  • tuple

  • set

  • dict

  • str

from pyspark import SparkContext,SparkConf
​
# 创建SparkConf对象
conf = SparkConf().setMaster("local[*]").setAppName("test_spark_app")
# 基于SparkConf创建SparkContext对象
sc = SparkContext(conf=conf)
​
​
rdd1 = sc.parallelize([1, 2, 3])
rdd2 = sc.parallelize((1, 2, 3))
rdd3 = sc.parallelize("abcd")
rdd4 = sc.parallelize({1, 2, 3})
rdd5 = sc.parallelize({"key1": "value1", "key2": "value2"})

如果要查看RDD里面有什么内容,需要用到collect()方法

from pyspark import SparkContext,SparkConf
​
# 创建SparkConf对象
conf = SparkConf().setMaster("local[*]").setAppName("test_spark_app")
# 基于SparkConf创建SparkContext对象
sc = SparkContext(conf=conf)
​
​
rdd1 = sc.parallelize([1, 2, 3])
rdd2 = sc.parallelize((1, 2, 3))
rdd3 = sc.parallelize("abcd")
rdd4 = sc.parallelize({1, 2, 3})
rdd5 = sc.parallelize({"key1": "value1", "key2": "value2"})

用textFile方法,读取文件数据加载到Spark内,成为RDD对象

rdd = sc.textFile("D:/hello.txt")
print(rdd.collect)

得到RDD后可以调用RDD方法进行计算

map算子

功能:map算子是将RDD的数据一条条处理,返回新的RDD

from pyspark import SparkContext,SparkConf
#Spark需要
import os
os.environ['PYSPARK_PYTHON'] = "E:/Python/python.exe"
​
# 创建SparkConf对象
conf = SparkConf().setMaster("local[*]").setAppName("test_spark_app")
# 基于SparkConf创建SparkContext对象
sc = SparkContext(conf=conf)
​
rdd = sc.parallelize([1,2,3,4,5])
​
def func(data):
    return data * 10
​
#方法不用加括号
rdd_map = rdd.map(func)
​
#也可以匿名内部类
# rdd2 = rdd.map(lambda x : x * 10)
​
print(rdd_map.collect())

flatMap算子

功能:对rdd执行map操作,然后进行解除嵌套操作

#解除嵌套的list
lst = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
​
#如果解除嵌套
lst = [1, 2, 3, 4, 5, 6, 7, 8, 9]

from pyspark import SparkContext,SparkConf
#Spark需要
import os
os.environ['PYSPARK_PYTHON'] = "E:/Python/python.exe"
​
# 创建SparkConf对象
conf = SparkConf().setMaster("local[*]").setAppName("test_spark_app")
# 基于SparkConf创建SparkContext对象
sc = SparkContext(conf=conf)
​
rdd = sc.parallelize(["itheima itcast 666", "itheima itheima itcast", "python itheima"])
#解除嵌套
flat_map = rdd.flatMap(lambda x : x.split(" "))
​
print(flat_map.collect())

输出结果:

['itheima', 'itcast', '666', 'itheima', 'itheima', 'itcast', 'python', 'itheima']

reduceBykey算子

功能:针对KV型RDD, 自动按照key分组,然后根据呢提供的聚合逻辑,完成组内数据(value)的聚合操作

需要传入两个参数,返回一个参数,类型需一样

from pyspark import SparkContext,SparkConf
#Spark需要
import os
os.environ['PYSPARK_PYTHON'] = "E:/Python/python.exe"
​
# 创建SparkConf对象
conf = SparkConf().setMaster("local[*]").setAppName("test_spark_app")
# 基于SparkConf创建SparkContext对象
sc = SparkContext(conf=conf)
​
rdd = sc.parallelize([('a', 1), ('a', 1), ('b', 1), ('a', 1), ('b', 1)])
reduce_by_key = rdd.reduceByKey(lambda a, b: a + b)
print(reduce_by_key.collect())
filter算子

功能:过滤想要的数据进行保留

#保留奇数
#满足条件的保留
rdd.filter(lambda x : x % 2 == 1)

distinct算子

功能:对RDD数据进行去重,返回新的RDD

直接调用,不用传入方法

from pyspark import SparkContext,SparkConf
#Spark需要
import os
os.environ['PYSPARK_PYTHON'] = "E:/Python/python.exe"
​
# 创建SparkConf对象
conf = SparkConf().setMaster("local[*]").setAppName("test_spark_app")
# 基于SparkConf创建SparkContext对象
sc = SparkContext(conf=conf)
​
​
rdd = sc.parallelize([1,1,2,2,3,3,3,4,5,6])
rdd_distinct = rdd.distinct()
print(rdd_distinct)

sortBy算子

功能:对RDD数据进行排序,基于你指定的排序依据

想根据谁排序就返回谁

语法:

ascending 升降序

numPartitions 分区数量

#根据第二个排序
rdd.sortBy(lambda x : x[1], ascending=Flase,numPartitions=1)

数据输出

输出为python对象

collect算子
rdd.collect()
#返回值为list
reduce算子

功能:对RDD数据集按照你传入的逻辑进行聚合

语法:

rdd = sc.parallelize([1,2,3,4,5])
#reduce
rdd_reduce = rdd.reduce(lambda a, b: a + b)
print(rdd_reduce)
#输出15
take算子

功能:取出RDD前N个元素,组成list返回


#take
rdd_take = rdd.take(3)
print(rdd_take)
count算子

功能:统计RDD元素个数

#count
rdd_count = rdd.count()
print(rdd_count)

输出到文件中

saveAsTextFile算子

功能:将RDD的数据写入文本文件中

支持 本地输出,hdfs等文件系统

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值