给大家分享我常用的RDD操作方法。版本是spark-2.4.0,使用的python(不同的语言RDD的用法差不多)
一,创建
- 从本地文件获取
lines = sc.textFile("file:///usr/local/spark/mycode/rdd/word.txt")
- 从HDFS中获取
lines = sc.textFile("hdfs://localhost:9000/user/hadoop/word.txt")
- 从kafka中获取
from pyspark.streaming.kafka import KafkaUtils
brokers = "你的节点“
topic = ”topicname“
ssc = StreamingContext(sc, 30)
# 这个30 是执行频率,30秒一次
Streams = KafkaUtils.createDirectStream(ssc, [topic], kafkaParams={"metadata.broker.list": brokers})
- 从集合中获取
nums = [1,2,3,4,5]
rdd = sc.parallelize(nums)
二,转换
通过进来的数据,都是一些原始数据,我们需要通过一些特定的函数进行一些预处理。
- filter(func):基本用于一些过滤操作,筛选出满足函数func的元素,并返回一个新的数据集
- map(func):有状态的修改RDD的每个数据,将每个元素传递到函数func中,并将结果返回为一个新的数据集
- flatMap(func):与map()相似,但每个输入元素都可以映射到0或多个输出结果
- groupByKey():应用于(K,V)键值对的数据集时,返回一个新的(K, Iterable)形式的数据集
- reduceByKey(func):应用于(K,V)键值对的数据集时,返回一个新的(K, V)形式的数据集,其中的每个值是将每个key传递到函数func中进行聚合的方式,常见的有相加,或者拼接,也可以用于做比较判断等。
这里的func 指的是一个方法。一般都是直接通过lambda 函数 完成
三,执行
行动操作是真正触发计算的地方。Spark程序执行到行动操作时,才会执行真正的计算,从文件中加载数据,完成一次又一次转换操作,最终,完成行动操作得到结果。
- count() 返回数据集中的元素个数
- collect() 以数组的形式返回数据集中的所有元素
- first() 返回数据集中的第一个元素
- take(n) 以数组的形式返回数据集中的前n个元素
- reduce(func) 聚合函数, 通过函数func(输入两个参数并返回一个值)聚合数据集中的元素
- foreach(func) 遍历函数, 将数据集中的每个元素传递到函数func中运行*