|
|
|
@ -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)`
|
|
|
|
|
|
|
|
|
|
第四步:使用降序输出前三。
|
|
|
|
|