zy 6 years ago
commit 277787d529

@ -1,7 +1,4 @@
---
## 1.3 Spark分布式环境搭建
@ -109,9 +106,9 @@ export SPARK_MASTER_IP=master节点IP
```
vim /etc/hosts
添加
192.168.20.100 master-node
192.168.20.101 slave1-node
192.168.20.102 slave2-node
192.168.20.100 master
192.168.20.101 woker1
192.168.20.102 woker2
```
**第二步: 配置SSH实现免密登录**
@ -129,12 +126,10 @@ AuthorizedKeysFile .ssh/authorized_keys # 公钥文件路径(和上面生成
重启`ssh`。
生成从机的公钥
```
台机器上都执行
台机器上都执行
ssh-keygen -t rsa -P ""
slave1上执行
scp ~/.ssh/id_rsa.pub 192.168.20.100:~/.ssh/id_rsa.pub.s1

@ -1,16 +1,16 @@
## 2.1 Spark SQL入门
`Spark SQL`是`Spark`用来处理结构化数据的一个模块。`Spark SQL`为了支持结构化数据的处理,它提供了两个编程抽象分别叫做`DataFrame`和`DataSet`。
`Spark SQL`是`Spark`用来处理结构化数据的一个模块。`Spark SQL`为了支持结构化数据的处理,它提供了两个编程抽象分别叫做`DataFrames`和`DataSets`。
### 2.1.1 DataFrameDataset和RDD的关系
### 2.1.1 DataFramesDatasets和RDD的关系
`RDD` :仅表示数据集,`RDD`没有元数据,也就是说没有字段信息。
`DataFrame`:由于`RDD`的局限性,`Spark`产生了`DataFrame``DataFrame=RDD+Schema``Schema`也就是字段信息。`DataFrame`是一种特殊类型的 `Dataset``DataSet[Row] = DataFrame`。
`DataFrames`:由于`RDD`的局限性,`Spark`产生了`DataFrames``DataFrame=RDD+Schema``Schema`也就是字段信息。`DataFrames`是一种特殊类型的 `Datasets``DataSet[Row] = DataFrame`。
`Dataset`:可以理解为强类型的`DataFrame`,但是`Python`不支持`Dataset API`。
`Datasets`:可以理解为强类型的`DataFrames`也就是说每一个`record`存储的是一个强类型值而不是一个`Row`。但是`Python`不支持`Datasets API`。

@ -2,7 +2,7 @@
### 2.2.1 数据源
本教程提供一份全球战斗机相关指标参数的`json`数据(见第二章节`data`目录)
本教程提供一份全球战斗机相关指标参数的`json`数据。
其中一条数据如下:
@ -45,9 +45,11 @@ spark = SparkSession \
`sqlDF = spark.sql("sql语句")`
`sql`语句参考处理思路:
最大飞行速度字段特征:带有分隔符的数字和中文组成,如`1,438.4`千米每小时
第一步:提取中文前的所有数字,可使用已有函数`regexp_extract`通过正则表达式提取。
第一步:使用`regexp_extract`通过正则表达式提取中文前的所有数字。
`regexp_extract`函数:`regexp_extract(str, regexp, [idx]) `
参数说明:
@ -63,6 +65,7 @@ spark = SparkSession \
`1`表示返回正则表达式中第一个()对应的结果,以此类推 。
示例:
1`select regexp_extract('hitdecisiondlist','(i)(.*?)(e)',0) ;`
得到的结果为:
@ -75,14 +78,17 @@ spark = SparkSession \
`i`
本例可使用如下表达式提取:
`(regexp_extract(`最大飞行速度`,'[\d,\.]+',0)`
需要注意的是当把该表达式加入`spark.sql("sql语句")`时,`\d`和`\.`需要转义(`\\`)。
第二步:使用`replace`函数去除千位分隔符`,`。
REPLACE函数( string_replace1 , string_replace2 , string_replace3 )
`REPLACE`函数:`REPLACE ( string_replace1 , string_replace2 , string_replace3 )`
参数说明:
`string_replace1`:待搜索的字符串表达式。
@ -91,12 +97,18 @@ REPLACE函数( string_replace1 , string_replace2 , string_replace3 )
`string_replace3`:替换用的字符串表达式。
本例可使用如下表达式将`,`替换为`''`
`replace(regexp_extract(`最大飞行速度`,'[\\\d,\\\.]+',0),',','')`
```
replace(regexp_extract(`最大飞行速度`,'[\\\d,\\\.]+',0),',','')
```
第三步:使用`CAST`函数将字符串转化为`double`用于排序。
本例可使用如下表达式:
`cast(replace(regexp_extract(`最大飞行速度`,'[\\\d,\\\.]+',0),',','') as float)`
```
cast(replace(regexp_extract(`最大飞行速度`,'[\\\d,\\\.]+',0),',','') as float)
```
第四步:使用降序输出前三。
@ -117,13 +129,3 @@ REPLACE函数( string_replace1 , string_replace2 , string_replace3 )
<p align="center" >
<img style="border: 2px solid #ddd;padding: 5px; background: #fff;" src="https://www.educoder.net/api/attachments/457571" alt="" height="100%" width="100%" />
</p>

@ -2,7 +2,7 @@
### 2.3.1 数据源
本教程提供一份全球战斗机相关指标参数的`json`数据(见第二章节`data`目录)
本教程提供一份全球战斗机相关指标参数的`json`数据。
其中一条数据如下:
@ -12,7 +12,7 @@
### 2.3.2 统计指标说明
统计出全球各研发单位研制的战斗机在全球所有战斗机中的占比以百分号显示,并保留两位小数,如:`0.12%`),原始数据中战斗机为空的不计入计算。
统计出全球各研发单位研制的战斗机在全球所有战斗机中的占比以百分号显示,并保留两位小数,如:`0.12%`),原始数据中战斗机为空的不计入计算。
### 2.3.3 结果数据保存

Loading…
Cancel
Save