|
|
|
@ -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("保存路径")`
|
|
|
|
|