spark--基本操作

王者荣耀的一个小案例

rdd=sc.textFile("/user/hadoop/wangzhe.csv")
print(rdd.collect())
print("=="*50)
#1,统计王者荣耀一共赚了多少钱
rdd1=rdd.map(lambda x:x.split(",")).map(lambda x:int(x[2]))
print(rdd1.collect())
rdd1.reduce(lambda x,y:x+y)
print("=="*50)
#,2分别统计每个区共花了多少钱
rdd2=rdd.map(lambda x:x.split(",")).map(lambda x:(x[1],int(x[2])))
print(rdd2.collect())
print("=="*50)
rdd2.reduceByKey(lambda x,y:x+y).collect()
#3,分别统计每个人花了多少钱
rdd2=rdd.map(lambda x:x.split(",")).map(lambda x:(x[0],int(x[2])))
print(rdd2.collect())
print("=="*50)
rdd2.reduceByKey(lambda x,y:x+y).collect()
#统计每个人每个区花了多少钱
rdd3=rdd.map(lambda x:x.split(",")).map(lambda x:((x[0],x[1]),int(x[2])))
print(rdd3.collect())
print("=="*50)
rdd4=rdd3.reduceByKey(lambda x,y:x+y)
#按钱进行排序
rdd4.sortByKey(True).collect()
#按名字正序排序,名字相同,按区倒序排序
rs=rdd3.collect()
rs=sorted(rs,key=(lambda x:x[0][1]),reverse=True)
rs=sorted(rs,key=(lambda x:x[0][0]),reverse=False)
print(rs)

输出结果:


键值对的RDD有以下几种连接变换:

join -- 内连接:

spark = SparkContext.getOrCreate(conf)
rdd1 = spark.parallelize([('a',(2,4)),('b',3),('c',5)])
rdd2 = spark.parallelize([('x',1),('a',5),('t',9),('b',6)])
rdd7=rdd1.join(rdd2)
print(rdd7.collect())

 rightOuterJoin -- 右连接:

rdd8=rdd1.rightOuterJoin(rdd2)
print(rdd8.collect())

leftOuterJoin -- 左连接

cogroup -- 全连接

subtractByKey -- 减连接

combineByKey 变换例子:

keylist=['大专', "大专", '大专',"本科", '本科', "本科", '本科']
valuelist=[ 6000, 6600,7000,7800, 8000, 9000,10000,8900]
pair=zip(keylist,valuelist)
vec = sc.parallelize(pair)
print (vec.collect())
def createCombiner(x):
    return (x, 1)          #x初始化元组
def mergeValue(x, y):
    return (x[0] + y, x[1] + 1)      #x[0]+y代表的是值的和+x[1]+1是次数
def mergeCombiners(x, y):
    return (x[0] + y[0], x[1] + y[1])   #x[0]+y[0]是合并的和,x[1]+y[1]代表的是合并的次数
processed = vec.combineByKey(createCombiner, mergeValue, mergeCombiners)
print(processed.collect())
processed.mapValues(lambda xy: xy[0]/xy[1]).collectAsMap()

输出结果


猜你喜欢

转载自blog.csdn.net/qq_41655148/article/details/80260561