Pyspark交互式编程

这篇具有很好参考价值的文章主要介绍了Pyspark交互式编程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

大数据学习笔记02

Pyspark交互式编程

  1. 有该数据集Data01.txt 该数据集包含了某大学计算机系的成绩,数据格式如下所示:
Tom,DataBase,80
Tom,Algorithm,50
Jim,DataBase,90
Jim,Algorithm,60......

根据给定的数据集,在pyspark中通过编程来完成以下内容:文章来源地址https://www.toymoban.com/news/detail-403708.html

  • 该系总共有多少学生; (提前启动好pyspark)
lines = sc.textFile("file:///usr/local/spark/sparksqldata/Data01.txt")加载文件
res = lines.map(lambda x:x.split(",")).map(lambda x: x[0]) //获取每行数据的第1列 
distinct_res = res.distinct()  //去重操作
distinct_res.count()//取元素总个数
  • 该系共开设了多少门课程;
lines = sc.textFile("file:///usr/local/spark/sparksqldata/Data01.txt")
res = lines.map(lambda x:x.split(",")).map(lambda x:x[1]) //获取每行数据的第2列
distinct_res = res.distinct()//去重操作
distinct_res.count()//取元素总个数
  • Tom同学的总成绩平均分是多少;
lines = sc.textFile("file:///usr/local/spark/sparksqldata/Data01.txt")
res = lines.map(lambda x:x.split(",")).filter(lambda x:x[0]=="Tom") //筛选Tom同学的成绩信息
res.foreach(print) 
score = res.map(lambda x:int(x[2])) //提取Tom同学的每门成绩,并转换为int类型
num = res.count() //Tom同学选课门数
sum_score = score.reduce(lambda x,y:x+y) //Tom同学的总成绩
avg = sum_score/num // 总成绩/门数=平均分
print(avg)
  • 求每名同学的选修的课程门数;
lines = sc.textFile("file:///usr/local/spark/sparksqldata/Data01.txt")
res = lines.map(lambda x:x.split(",")).map(lambda x:(x[0],1)) //学生每门课程都对应(学生姓名,1),学生有n门课程则有n个(学生姓名,1)
each_res = res.reduceByKey(lambda x,y: x+y) //按学生姓名获取每个学生的选课总数
each_res.foreach(print)
  • 该系DataBase课程共有多少人选修;
lines = sc.textFile("file:///usr/local/spark/sparksqldata/Data01.txt")
res = lines.map(lambda x:x.split(",")).filter(lambda x:x[1]=="DataBase")
res.count()
  • 各门课程的平均分是多少;
lines = sc.textFile("file:///usr/local/spark/sparksqldata/Data01.txt")
res = lines.map(lambda x:x.split(",")).map(lambda x:(x[1],(int(x[2]),1))) //为每门课程的分数后面新增一列1,表示1个学生选择了该课程。格式如('ComputerNetwork', (44, 1))
temp = res.reduceByKey(lambda x,y:(x[0]+y[0],x[1]+y[1])) //按课程名聚合课程总分和选课人数。格式如('ComputerNetwork', (7370, 142))
avg = temp.map(lambda x:(x[0], round(x[1][0]/x[1][1],2)))//课程总分/选课人数 = 平均分,并利用round(x,2)保留两位小数
avg.foreach(print)
  • 使用累加器计算共有多少人选了DataBase这门课。
lines = sc.textFile("file:///usr/local/spark/sparksqldata/Data01.txt")
res = lines.map(lambda x:x.split(",")).filter(lambda x:x[1]=="DataBase")//筛选出选了DataBase课程的数据
accum = sc.accumulator(0) //定义一个从0开始的累加器accum
res.foreach(lambda x:accum.add(1))//遍历res,每扫描一条数据,累加器加1
accum.value //输出累加器的最终值
编写独立应用程序实现数据去重
  • 对于两个输入文件A和B,编写Spark独立应用程序,对两个文件进行合并,并剔除其中重复的内容,得到一个新文件C。
  • 假设当前目录为/usr/local/spark/mycode/remdup,该目录下新建一个remdup.py文件
from pyspark import SparkContext#初始化SparkContext
sc = SparkContext('local','remdup')#加载两个文件A和B
lines1 = sc.textFile("file:///usr/local/spark/mycode/remdup/A")
lines2 = sc.textFile("file:///usr/local/spark/mycode/remdup/B")#合并两个文件的内容
lines = lines1.union(lines2)#去重操作
distinct_lines = lines.distinct() #排序操作
res = distinct_lines.sortBy(lambda x:x)
#将结果写入result文件中,repartition(1)的作用是让结果合并到一个文件中,不加的话会结果写入到两个文件
res.repartition(1).saveAsTextFile("file:///usr/local/spark/mycode/remdup/result")
#最后在目录/usr/local/spark/mycode/remdup下执行下面命令执行程序(注意执行程序时请先退出pyspark shell,否则会出现“地址已在使用”的警告);
编写独立应用程序实现求平均值问题
  • 每个输入文件表示班级学生某个学科的成绩,每行内容由两个字段组成,第一个是学生名字,第二个是学生的成绩;编写Spark独立应用程序求出所有学生的平均成绩,并输出到一个新文件中。
  • 假设当前目录为/usr/local/spark/mycode/avgscore,在当前目录下新建一个avgscore.py,执行如下代码
from pyspark import SparkContext
sc = SparkContext('local',' avgscore')
lines1 = sc.textFile("file:///usr/local/spark/mycode/avgscore/Algorithm.txt")
lines2 = sc.textFile("file:///usr/local/spark/mycode/avgscore/Database.txt")
lines3 = sc.textFile("file:///usr/local/spark/mycode/avgscore/Python.txt")
lines = lines1.union(lines2).union(lines3)
data = lines.map(lambda x:x.split(" ")).map(lambda x:(x[0],(int(x[1]),1)))
res = data.reduceByKey(lambda x,y:(x[0]+y[0],x[1]+y[1]))
result = res.map(lambda x:(x[0],round(x[1][0]/x[1][1],2)))
result.repartition(1).saveAsTextFile("file:///usr/local/spark/mycode/avgscore/result")

到了这里,关于Pyspark交互式编程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 零知识证明学习(三)—— 非交互式零知识证明(zkSNARKs)

    本节主要介绍一种新的零知识证明- z k S N A R K zkSNARK z k S N A R K , z k S N A R K : z e r o − k n o w l e d g e S u c c i n c t N o n − I n t e r a c t i v e A r g u m e n t s o f K n o w l e d g e zkSNARK:zero-knowledge Succinct Non-Interactive Arguments of Knowledge z k S N A R K : z e r o − k n o w l e d g e S u c c i n c t

    2024年01月20日
    浏览(63)
  • 用 ChatGPT 尝试 JavaScript 交互式学习体验,有用但不完美

    很好,但还不能取代专家导师,有时还会犯错! ChatGPT 教小狗编程( Midjourney 创作) GPT-4刚刚发布,相较于GPT-3.5,它有显著的增强功能。其中之一是它在更长时间的交互和更大的提示下,能够更好地保持连贯性。 多年来,我一直致力于建立前端教学网站,为JavaScript开发人员

    2024年02月02日
    浏览(50)
  • 交互式笔记Jupyter Notebook本地部署并实现公网远程访问内网服务器

    最近,我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念,而且内容风趣幽默。我觉得它对大家可能会有所帮助,所以我在此分享。点击这里跳转到网站。 1.前言 在数据分析工作中,使用最多的无疑就是各种函数、图表、代码和说明文档,这些

    2024年02月04日
    浏览(50)
  • Interactive Linear Algebra:免费的交互式线性代数学习教程

    本文介绍一个学习线性代数的网站,该网站通过将线性代数中的数学规则可视化,更直观的展示线性代数的运算过程。该网站可以帮助我们更快更高效的学习线性代数。如果有考研的同学或者觉得学习线性代数很枯燥或者很困难的同学,可以了解该网站,促进高效学习和理解

    2024年02月13日
    浏览(150)
  • 使用Gradio库进行交互式数据可视化:Timeseries模块介绍

    ❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博相关......)👈 博主原文链接:https://www.yourmetaverse.cn/nlp/439/ (封面图由文心一格生成) 在

    2024年02月13日
    浏览(51)
  • 可视化工具:将多种数据格式转化为交互式图形展示的利器

    在数据驱动的时代,数据的分析和理解对于决策过程至关重要。然而,不同的数据格式和结构使得数据的解读变得复杂和困难。为了解决这个问题,一种强大的可视化工具应运而生。这个工具具有将多种数据格式(包括 JSON 、 YAML 、 XML 、 CSV 等)转化为交互式图形展示的能力

    2024年02月19日
    浏览(38)
  • python:基于GeoPandas和GeoViews库将GEDI激光高程数据映射到交互式地图

    作者:CSDN @ _养乐多_ 本文将介绍 GEDI(Global Ecosystem Dynamics Investigation)激光雷达数据某数据点波形数据提取,并绘制图表,添加其他图表元素并使图表具有交互性。 在本文中,我们将探索如何打开、读取和处理GEDI数据,并利用地理信息处理库GeoPandas和地理空间数据可视化库

    2024年02月15日
    浏览(50)
  • 交互式数据分析和处理新方法:pandas-ai =Pandas + ChatGPT

    Python Pandas是一个为Python编程提供数据操作和分析功能的开源工具包。这个库已经成为数据科学家和分析师的必备工具。它提供了一种有效的方法来管理结构化数据(Series和DataFrame)。 在人工智能领域,Pandas经常用于机器学习和深度学习过程的预处理步骤。Pandas通过提供数据清理

    2024年02月03日
    浏览(50)
  • 交互式shell与非交互式shell,反弹shell

    交互shell就是shell等待你的输入,并且立即执行你提交的命令。 这种模式被称作交互式是因为shell与用户进行交互。 这种模式也是大多数用户非常熟悉的:登录、执行一些命令、签退。当签退后,shell也终止了。 需要进行信息交互,例如输入某个信息 会返回信息 你需要对其输

    2024年02月02日
    浏览(55)
  • Pandas+ChatGPT超强组合pandas-ai:交互式数据分析和处理新方法

    Python Pandas是一个为Python编程提供数据操作和分析功能的开源工具包。这个库已经成为数据科学家和分析师的必备工具。它提供了一种有效的方法来管理结构化数据(Series和DataFrame)。 在人工智能领域,Pandas经常用于机器学习和深度学习过程的预处理步骤。Pandas通过提供数据清理

    2024年02月12日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包