【 Spark编程基础 】实验3

news/2024/11/17 8:42:30/

准备工作

启动Hadoop集群 & Spark

• 启动Hadoop集群start-all.sh
• 启动Sparkcd /usr/local/spark/spark-2.3.3-bin-hadoop2.6/# ./sbin/start-all.sh

实验数据说明。

• 数据为1970年到2016年,每年各球队的球员比赛数据统计,数据文件的格式如图1所示:
在这里插入图片描述

图1. NBA球员评估数据

• 篮球数据缩写说明如图2所示:
在这里插入图片描述
图2.篮球数据缩写说明

• 获取数据集:

数据集路径:https://staticfile.eec-cn.com/dataSet/systemLib/80c034eedda84db5aeec2a1558c51cc6.zip

• 将下载的数据集,解压缩到/home/data/目录下

mkdir /home/data
cd /home/data
wget https://staticfile.eec-cn.com/dataSet/systemLib/80c034eedda84db5aeec2a1558c51cc6.zip
unzip 80c034eedda84db5aeec2a1558c51cc6.zip

#1 集群启动

• 启动Hadoop集群

cd /opt/module/hadoop
./sbin/start-all.sh

• 启动Spark

 cd /opt/module/spark./sbin/start-all.sh

#2 上传实验数据到HDFS

• 创建数据目录

cd /opt/module/hadoop
hadoop fs -mkdir -p /home/student/data

• 上传数据集

hadoop fs -put /home/data/nba_data/* /home/student/data

#3 分析实现过程

启动IDEA,创建Python文件

  • 启动IDEA
cd /opt/module/idea-IU-223.8836.41
./bin/idea.sh
  • 登录自己的JetBrain账号

  • 创建Python项目

实现过程

SparkSession

from pyspark import SparkConf
from pyspark.sql import SparkSession
import pyspark.sql.functions as F
if __name__ == '__main__':conf = SparkConf().setAppName("spark sql demo").setMaster("local[*]")sparkSession = SparkSession.builder.config(conf=conf).getOrCreate()
​ds = sparkSession.read.format('csv').load("hdfs://node1:8020/home/student/data/leagues_NBA_2016_per_game_per_game.csv")#查看表ds.show()#查看表结构ds.printSchema()#查看某一列 类似于MySQL: select Player,Tm from peopleds.select("Player", "Tm").show()#查看多列并作计算 #基于当前列进行加1ds.select("Player", ds.Age+1).show()#设置过滤条件 ds.filter("Age > 21").show()#做聚合操作 ds.groupBy("Tm").count().show()#上述多个条件进行组合 select ta.age,count(*) from# (select name,age+1 as "age" from people) as ta where ta.age>21 group by ta.ageds.select("Player", (ds.Aage + 1).alias("Age")).filter("Age > 21").groupBy("Tm").count().show()#直接使用spark SQL进行查询#先注册为临时表ds.createOrReplaceTempView("nba")ds.cache()sqlDF = sparkSession.sql("SELECT * FROM nba")sqlDF.show()

SparkContext

from pyspark import SparkConf, SparkContext, SQLContext, Row
from pyspark.sql.types import IntegerType, StructType, StructField, StringType
​
if __name__ == '__main__':conf = SparkConf().setAppName("HiveDemo").setMaster("local")sc = SparkContext(conf=conf)# Spark1.0中访问SparkSQL的方式,现在还保留,为了向后兼容,Spark2.0以后用SparkSession可以代替sqlContext = SQLContext(sc)# 设置conf,配置AppName,运行的Master(这里设置为本地模式# 创建一个sc的SQLContext对象# 创建一个sqlcontext对象(也可以是SQLContext的子类对象,如 HiveContext)# 加载数据源datas = sc.textFile("hdfs://node1:8020/home/student/data/leagues_NBA_2016_per_game_per_game.csv")# RDD转换为DataFrame有两种方式:(这里使用了第二种)# 使用反射方式推断元数据# 使用编程接口来创建DataFrame.rowRDD = datas.map(lambda line: line.split(",")).map(lambda data: Row(int(data[0]), data[1], data[2]))# 创建出元素为ROW的RDD# 流程简介:从原始的RDD创建一个元素为row的RDD;接下来创建一个structType,来代表ROW,最后将动态定义的# 元数据应用到RDD(ROW)上structType = StructType([StructField("Rk", IntegerType(), True),StructField("Player", StringType(), True),StructField("Age", IntegerType(), True),StructField("Tm", StringType(), True)# 通过编程的方式动态的构造元数据])# 通过sqlContext的createDataFrame方法,创建DataFrame,# 将row类型的RDD和数据结构structType结合到一起stuDF = sqlContext.createDataFrame(rowRDD, structType)stuDF.show()# show方法可以把里面的数据显示出来stuDF.registerTempTable("nba")# 注册为临时表,这样就可以使用SQL语句了.sqlContext.sql("select Player from nba where Tm='SAC'").show()

#4 扩展功能

  1. 合并nba所有csv数据

  2. 清洗数据,讲cvs文件中多余列名去掉


http://www.ppmy.cn/news/53186.html

相关文章

几个实用的正则表达式

1到100之间的正整数正则 表达式:^[1-9]\d?$|^100$ 解释: ^表示匹配字符串开始位置 [1-9]表示数字1-9中的任意一个 \d表示任意一个数字 ?表示前面一个字符或子表达式出现0或1次 $表示匹配字符串结束位置 |表示或 最终的解释为:匹配满…

js 各种数据类型互相转换的函数

js 各种数据类型互相转换的函数 JavaScript中的数据类型包括字符串、数字、布尔、数组、对象等,以下是它们之间互相转换的函数: 字符串转数字: parseInt()函数:把字符串转换为整数。如果字符串以非数字字符开头,则返…

FreeRTOS系统学习-内核篇.01-数据结构---列表与列表项定义详解-链表节点插入实验

# 内核篇.01 列表与列表项 为什么要学列表?链表单向链表双向链表 FreeRTOS 中链表的实现节点节点初始化尾节点根节点链表根节点初始化将节点插入到链表的尾部将节点按照升序排列插入到链表将节点从链表删除节点带参宏小函数 链表节点插入实验实验现象 为什么要学列表…

【Java 】Java 类加载和类加载器

文章目录 前言一、加载二、链接验证准备解析 三、初始化发生的时机不会触发类的初始化 四、类加载器双亲委派模式 前言 Java 的类加载阶段分为:加载、链接、初始化,而链接的过程中包括:验证、准备、解析。 一、加载 将类的字节码载入方法区…

二维码在设备点维一体化管理中的应用

随着科技发展,设备点维一体化管理体系应运而生,该管理体系的出现让设备维护保养变得更加高效精细化。 设备点维一体化管理体系以设备点检和维护保养为基础,通过日常、专业及精密点检,对点检测得的数据和设备给油脂保养情况进行统…

关于容器(Docker)的形象比喻

1 将容器比喻为样板间 容器是一种特殊的进程 容器依赖与Linux操作系统内核的几项技术:namespace、cgroup、chroot namespace 与编程语言里的 namespace 有点类似,它可以创建出独立的文件系统、主机名、进程号、网络等资源空间,相当于给进程…

记录-有意思的气泡 Loading 效果

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 今日,群友提问,如何实现这么一个 Loading 效果: 这个确实有点意思,但是这是 CSS 能够完成的? 没错,这个效果中的核心气泡效果&am…

【机智云物联网低功耗转接板】+模拟无线远程控制仪表启停

GE211 是机智云自研的定制化的物联网转接板,使用 ESP32-C3-WROOM-02 通讯模块,适用于白色智能家电等设备应用。硬件设计上采用支持 WiFi 和 BLE 的双模无线通信模块,具备TTL电平转换串口,免开发快速接入,提高开发效率。…