python spark教程_Python3:Python+spark编程实战

编辑推荐:

本文来自csdn,本文简单介绍了Python+spark的配置运行及实例介绍,希望对您的学习有所启迪。

0、前提

0.1 配置

可参考:

0.2 有关spark

说明:

spark 不兼容 Python3.6

安装注意版本

可下载:

anaconda4.2

一、实例分析

1.1 数据 student.txt

201908131.png

1.2 代码

#studentExample

例子 练习

def map_func(x):

s = x.split()

return (s[0], [int(s[1]),int(s[2]),int(s[3])])

#返回为(key,vaklue)格式,其中key:x[0],value:x[1]且为有三个元素的列表

#return (s[0],[int(s[1],s[2],s[3])]) #注意此用法不合法

def has100(x):

for y in x:

if(y == 100): #把x、y理解为 x轴、y轴

return True

return False

def allis0(x):

if(type(x)==list and sum(x) == 0): #类型为list且总分为0

者为true;其中type(x)==list :判断类型是否相同

return True

return False

def subMax(x,y):

m = [x[1][i] if(x[1][i] > y[1][i]) else y[1][i]

for i in range(3)]

return('Maximum subject score', m)

def sumSub(x,y):

n = [x[1][i]+y[1][i] for i in range(3)]

#或者 n = ([x[1][0]+y[1][0],x[1][1]+y[1][0],x[1][2]+y[1][2]])

return('Total subject score', n)

def sumPer(x):

return (x[0],sum(x[1]))#停止之前的SparkContext,不然重新运行或者创建工作会失败;另外,只有

sc.stop()也可以,但是首次运行会有误

try:

sc.stop()

except:

pass

from pyspark import SparkContext #导入模块

sc=SparkContext(appName='Student') #命名

lines=sc.textFile("student.txt").map(lambda

x:map_func(x)).cache() #导入数据且保持在内存中,其中cache():数据保持在内存中

count=lines.count() #对RDD中的数据个数进行计数;其中,RDD一行为一个数据集#RDD'转换'运算

(筛选 关键字filter)

whohas100 = lines.filter(lambda x: has100(x[1])).collect()

#注意:处理的是value列表,也就是x[1]

whois0 = lines.filter(lambda x: allis0(x[1])).collect()

sumScore = lines.map(lambda x: (x[0],sum(x[1]))).collect()

#‘动作’运算

maxScore = max(sumScore,key=lambda x: x[1]) #总分最高者

minScore = min(sumScore,key=lambda x: x[1]) #总分最低者

sumSubScore = lines.reduce(lambda x,y: sumSub(x,y))

avgScore = [x/count for x in sumSubScore[1]]#单科成绩平均值

#RDD key-value‘转换’运算

subM = lines.reduce(lambda x,y: subMax(x,y))

redByK = lines.reduceByKey(lambda x,y: [x[i]+y[i]

for i in range(3)]).collect() #合并key相同的value值x[0]+y[0],x[1]+y[1],x[2]+y[2]

#RDD'转换'运算

sumPerSore = lines.map(lambda x: sumPer(x)).collect()

#每个人的总分 #

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值