求包养QAQ

RDD操作

RDD创建

从本地文件系统中加载数据创建RDD

1、启动spark

pyspark
  • 从文件系统中加载数据创建RDD
sc #SparkContext的创建
lines = sc.textFile("file:///home/hjq/data/text.txt")
lines
lines.foreach(print)

202203290038543

从HDFS加载数据创建RDD

启动hdfs

start-all.sh

上传文件

hdfs dfs -mkdir /user/hjq/shiyan/   #新建文件夹
hdfs dfs -ls /user/hjq/   #查看目录
hdfs dfs -put /home/hjq/data/text.txt /user/hjq/shiyan/    #hdfs dfs -put 要上传的文件路径 上传目的路径

202203290038276

查看文件

hdfs dfs -ls /user/hjq/shiyan/  #查看目录
hdfs dfs -cat /user/hjq/shiyan/text.txt   #输出

202203290038189

加载

spark加载hdfs文件

lines = sc.textFile('hdfs://localhost:9000/user/hjq/shiyan/text.txt')
lines
lines.foreach(print)  #输出

202203290038867

停止hdfs

stop-all.sh
jps #查看是否关闭

通过并行集合(列表)创建RDD

输入列表、字符串、numpy生成数组

array = [1,2,3,4,5]
rdd = sc.parallelize(array)
rdd.foreach(print)

202203290038057

RDD操作

转换操作

filter(func)

筛选出满足函数func的元素,并返回一个新的数据集

显式定义函数

def f(line):
    b = "map" in line
    return(b)
 
lines = sc.textFile('file:///home/hjq/data/text.txt')
t = lines.filter(f)
t.foreach(print)

image

lambda函数

lines = sc.textFile('file:///home/hjq/data/text.txt')
linesWithSpark = lines.filter(lambda line: "map" in line)
linesWithSpark.foreach(print)

202203290038809

map(func)

将每个元素传递到函数func中,并将结果返回为一个新的数据集

字符串分词

显式定义函数
lines = sc.textFile('file:///home/hjq/data/text.txt')
def tt1(line):
	line = line.split(" ")
	return line

words = lines.map(tt1)
words.foreach(print)

202203290022499

lambda函数
lines = sc.textFile("file:///home/hjq/data/text.txt")
words = lines.map(lambda line:line.split(" "))
words.foreach(print)

202203290023890

数字加100

显式定义函数
data = [1,2,3,4,5]                                                          
rdd = sc.parallelize(data)
def add(x):
     return x+100

line = rdd.map(add)
line.foreach(print)

202203290025225

lambda函数
data = [1,2,3,4,5]
rdd1 = sc.parallelize(data)
rdd2 = rdd1.map(lambda x:x+100)
rdd2.foreach(print)

202203290025700

字符串加固定前缀

显示定义函数
data = ['python', 'hadoop', 'spark']
rdd = sc.parallelize(data)
def zz(x):
    return "good"+x

rdd2 = rdd.map(zz)
rdd2.foreach(print)

202203290025360

lambda函数
data = ['python', 'hadoop', 'spark']
rdd1 = sc.parallelize(data)
rdd2 = rdd1.map(lambda x:"good"+x)
rdd2.foreach(print)

202203290026148

flatMap(func)

分词

lines = sc.textFile('file:///home/hjq/data/text.txt')
words = lines.flatMap(lambda line:line.split(" "))
words.foreach(print)

202203290026626

单词映射成键值对

lines = sc.textFile('file:///home/hjq/data/text.txt')
words = lines.flatMap(lambda line:line.split()).map(lambda word:(word,1))
words.foreach(print)

202203290027782

reduceByKey()

统计词频,累加

data = [('python',1),('spark',1),('rdd',1),('big',1),('python',1),('spark',1),('rdd',1),('data',1),('big',1)]
words = sc.parallelize(data)
words2  = words.reduceByKey(lambda a,b:a+b)
words2.foreach(print)

202203290027706

乘法规则

data = [('python',3),('python',4),('spark',5),('rdd',1),('data',2),('big',3)]
words = sc.parallelize(data)
words2  = words.reduceByKey(lambda a,b:a*b)
words2.foreach(print)

202203290031383

groupByKey()

单词分组

data = [('python',3),('python',3),('spark',5),('rdd',1),('data',2),('spark',5),('rdd',1),('data',2),('big',4)]
words = sc.parallelize(data)
words2.groupByKey().foreach(print)

202203290032321

查看分组的内容

data = [('python',3),('spark',5),('rdd',1),('data',2),('big',4)]
words = sc.parallelize(data)
for i in words.groupByKey().collect():
	print(str(i[0])+':'+str([x for x in i[1]]))

202203290032564

分组之后做累加 map

data = [('python',3),('spark',5),('spark',5),('rdd',1),('big',4),('rdd',1),('data',2),('big',4)]
words = sc.parallelize(data)
words.groupByKey().map(lambda x: (x[0],sum(x[1]))).foreach(print)

202203290033430

sortByKey()

词频统计按单词排序

data = [('python',3),('spark',5),('rdd',1),('data',2),('big',4)]
words = sc.parallelize(data)
words.sortByKey().foreach(print)

202203290034937

sortBy()

词频统计按词频排序

data = [('python',3),('spark',5),('rdd',1),('data',2),('big',4)]
words.sortBy(lambda x:x[1], True).collect()  #升

words.sortBy(lambda x:x[1], False).collect()  #降

202203290035828

行动操作

foreach(print)

通过函数func(输入两个参数并返回一个值)聚合数据集中的元素

a_data = [1,2,3,4,5]
rdd = sc.parallelize(a_data)
rdd.foreach(print)

202203290039459

foreach(lambda a:print(a.upper())

el="hello world"
add=sc.parallelize(el)
add.foreach(lambda a:print(a.upper()))

202203290039051

collect()

以数组的形式返回数据集的所有元素

b_data = [1,2,3,4,5]
rdd = sc.parallelize(b_data)
rdd.collect()

202203290040373

count()

返回数据集中的元素个数

c_data =[1,2,3,4,5]
rdd =sc.parallelize(c_data)
rdd.count()

202203290036085

take(n)

以数组的形式返回数据集中的前n个元素

e_data = ['a','b','c','d','e']
rdd = sc.parallelize(e_data)
rdd.take(3)

202203290036591

reduce(func)

通过函数func(输入两个参数并返回一个值)聚合数据集中的元素

数值型的rdd元素做累加
e_data = [1,2,3,4,5]
rdd = sc.parallelize(e_data)
rdd.reduce(lambda a,b:a+b)

202203290036668

与reduceByKey区别

reduce——将RDD中元素前两个传给输入函数,产生一个新的return值,新产生的return值与RDD中下一个元素(第三个元素)组成两个元素,再被传给输入函数,直到最后只有一个值为止。

redeceByKey——对元素为KV对的RDD中Key相同的元素的Value进行binary_function的reduce操作,因此,Key相同的多个元素的值被reduce为一个值,然后与原RDD中的Key组成一个新的KV对。

posted @ 2022-03-19 21:43  Baby_Monster  阅读(85)  评论(0编辑  收藏  举报