diff --git a/chapter2/2.2对战斗机飞行性能进行分析.md b/chapter2/2.2对战斗机飞行性能进行分析.md index edf6083..b76cad9 100644 --- a/chapter2/2.2对战斗机飞行性能进行分析.md +++ b/chapter2/2.2对战斗机飞行性能进行分析.md @@ -44,6 +44,62 @@ spark = SparkSession \ `sqlDF = spark.sql("sql语句")` +`sql`语句参考处理思路: +最大飞行速度字段特征:带有分隔符的数字和中文组成,如`1,438.4`千米每小时 + +第一步:提取中文前的所有数字,可使用已有函数`regexp_extract`通过正则表达式提取。 +`regexp_extract`函数:`regexp_extract(str, regexp, [idx]) ` + +参数说明: + +`str`是被解析的字符串或字段名; + +`regexp` 是正则表达式; + +`idx`是返回结果 取表达式的哪一部分 默认值为1; + +`0`表示把整个正则表达式对应的结果全部返回; + +`1`表示返回正则表达式中第一个() 对应的结果 以此类推 。 + +示例: +1)`select regexp_extract('hitdecisiondlist','(i)(.*?)(e)',0) ;` +得到的结果为: + +`itde` + +2)`select regexp_extract('hitdecisiondlist','(i)(.*?)(e)',1) ;` + +得到的结果为: + +`i` + +本例可使用如下表达式提取: +`(regexp_extract(`最大飞行速度`,'[\d,\.]+',0)` + +需要注意的是当把该表达式加入`spark.sql("sql语句")`时,`\d`和`\.`需要转义(`\\`)。 + + +第二步:使用`replace`函数去除千位分隔符`,`。 + +REPLACE函数:( string_replace1 , string_replace2 , string_replace3 ) +参数说明: +`string_replace1`:待搜索的字符串表达式。 + +`string_replace2`:待查找的字符串表达式。 + +`string_replace3`:替换用的字符串表达式。 + +本例可使用如下表达式将`,`替换为`''`: +`replace(regexp_extract(`最大飞行速度`,'[\\\d,\\\.]+',0),',','')` + +第三步:使用`CAST`函数将字符串转化为`double`用于排序。 + +本例可使用如下表达式: +`cast(replace(regexp_extract(`最大飞行速度`,'[\\\d,\\\.]+',0),',','') as float)` + +第四步:使用降序输出前三 + 5.将处理结果保存到本地目录; `sqlDF.write.format("json").save("保存路径")`