diff --git a/chapter2/2.2对战斗机飞行性能进行分析.md b/chapter2/2.2对战斗机飞行性能进行分析.md index 5761631..5498fc7 100644 --- a/chapter2/2.2对战斗机飞行性能进行分析.md +++ b/chapter2/2.2对战斗机飞行性能进行分析.md @@ -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,11 +97,13 @@ REPLACE函数:( string_replace1 , string_replace2 , string_replace3 ) `string_replace3`:替换用的字符串表达式。 本例可使用如下表达式将`,`替换为`''`: + `replace(regexp_extract(`最大飞行速度`,'[\\\d,\\\.]+',0),',','')` 第三步:使用`CAST`函数将字符串转化为`double`用于排序。 本例可使用如下表达式: + `cast(replace(regexp_extract(`最大飞行速度`,'[\\\d,\\\.]+',0),',','') as float)` 第四步:使用降序输出前三。