zy 6 years ago
commit 2a33ac4cd1

@ -44,6 +44,64 @@ 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("保存路径")`

Loading…
Cancel
Save