SparkR处理数据框
1. 实验目标
运用SPARK技术对数据进行分析
2. 实验主要使用的 𝑃𝑦𝑡ℎ𝑜𝑛Python 库
名称 | 版本 | 简介 |
---|---|---|
𝑟𝑒𝑞𝑢𝑒𝑠𝑡𝑠requests | 2.20.02.20.0 | 线性代数 |
𝑃𝑎𝑛𝑑𝑎𝑠Pandas | 0.25.00.25.0 | 数据分析 |
𝑃𝑦𝑆𝑝𝑎𝑟𝑘PySpark | 2.4.32.4.3 | 大数据处理 |
𝑀𝑎𝑡𝑝𝑙𝑜𝑡𝑙𝑖𝑏Matplotlib | 3.0.13.0.1 | 数据可视化 |
3. 实验对象
- 本课程假设您已经学习了 𝑃𝑦𝑡ℎ𝑜𝑛Python 基础,具备可视化基础
- 学习对象:本科学生、研究生、人工智能、算法相关研究者、开发者
- 大数据分析与人工智能
DataFrame是二维的。列可以是不同的数据类型。您可以传递索引(行标签)和列(列标签),索引可以是数字,日期或字符串/元组。
Pandas是一个用于数据处理和分析的库。 Pandas提供了用于创建和操作Data Series和DataFrame对象的数据结构和操作。 数据可以从各种数据源导入,例如Numpy数组,Python字典和CSV文件。 Pandas允许您操作,组织和显示数据。
在这个简短的notebook本中,我们将加载并探索mtcars数据集。 具体来说,本教程涵盖:
- 将数据加载到内存中
- 创建SQLContext
- 创建Spark DataFrame
- 按列分组数据
- 处理列
- 从Spark DataFrame运行SQL查询
4. 实验步骤
步骤1 加载到DataFrame中
为了创建一个Spark DataFrame,我们加载一个名为ylw的外部数据框。 这个DataFrame包含了对11个变量的32个观测值:
[, 1] mpg Miles/(US) -->加仑
[, 2] cyl --> 气缸数量
[, 3] disp --> 移位 (cu.in.)
[, 4] hp --> 总马力
[, 5] drat --> 后轴比
[, 6] wt --> 重量 (lb/1000)
[, 7] qsec --> 1/4英里的时间
[, 8] vs --> V/S
[, 9] am --> 变速器 (0 = 自动, 1 = 手动)
[,10] gear --> 前进档的数量
[,11] carb --> 化油器的数量
代码示例:
pip install pandas==0.25.0
代码示例:
import pandas as pd
mtcars = pd.read_csv("/mydata/mtcars.csv")
代码示例:
mtcars.head()
步骤2 初始化SQLContext
要处理数据框,我们需要一个使用SQLContext(sc)
创建的SQLContext。 SQLContext使用已经在Data Scientist Workbench中创建的名为sc
的SparkContext。
代码示例:
sqlContext = SQLContext(sc)
步骤3 创建Spark 数据框
使用SQLContext和加载的本地DataFrame,我们创建一个Spark DataFrame:
代码示例:
sdf = sqlContext.createDataFrame(mtcars)
sdf.printSchema()
步骤4 显示数据框的内容
代码示例:
sdf.show(5)
步骤5 显示DataFrame的内容
代码示例:
sdf.select('mpg').show(5)
步骤6 过滤数据
过滤DataFrame以仅保留“mpg”小于18的行
代码示例:
sdf.filter(sdf['mpg'] < 18).show(5)
步骤7 处理列
SparkR还提供了许多可直接应用于数据处理和聚合的列的功能。 下面的示例显示了使用基本算术函数将lb转换为metric ton。
代码示例:
sdf.withColumn('wtTon', sdf['wt'] * 0.45).show(6)
步骤8 分组,汇总
Spark DataFrames支持许多常用的功能来在分组后汇总数据。 例如,我们可以按照如下所示计算汽缸的平均重量:
代码示例:
sdf.groupby(['cyl'])\
.agg({"wt": "AVG"})\
.show(5)
代码示例:
# 我们还可以对汇总的输出进行排序,以获得最常见的汽车
car_counts = sdf.groupby(['cyl'])\
.agg({"wt": "count"})\
.sort("count(wt)", ascending=False)\
.show(5)
步骤9 从Spark DataFrames运行SQL查询
Spark DataFrame也可以在Spark SQL中注册为临时表,并将DataFrame注册为表格,从而允许您对其数据运行SQL查询。 sql
函数使应用程序能够以编程方式运行SQL查询并将结果作为DataFrame返回。
代码示例:
# 将此数据框注册为表格。
sdf.registerTempTable("cars")
# SQL语句可以使用sql方法运行
highgearcars = sqlContext.sql("SELECT gear FROM cars WHERE cyl >= 4 AND cyl <= 9")
highgearcars.show(6)