请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

sparkSql--函数decode无效

使用decode无法将%23解析为#,代码如下:
val rdd = spark.sparkContext.parallelize(List(“1104319%231104317”,“1104319%231104318”,“1104317”))

import spark.implicits._
val rs = rdd.map(People(_)).toDF()
rs.select(decode($"name","utf-8")).show(false)

结果如下:
±------------------+
|decode(name, utf-8)|
±------------------+
|1104319%231104317 |
|1104319%231104318 |
|1104317 |
±------------------+

正在回答 回答被采纳积分+3

3回答

提问者 慕前端5264115 2019-02-25 15:17:37

自定义UDF就可以转义:

val decodeCustom = udf((ids: String)=>{
   URLDecoder.decode(ids,"utf-8")
})

调用如下:

rs.select(decodeCustom($"name")).show(false)


结果如下(可以将%23转义为#):

+---------------+

|UDF(name)      |

+---------------+

|1104319#1104317|

|1104319#1104318|

|1104317        |

+---------------+


0 回复 有任何疑惑可以回复我~
提问者 慕前端5264115 2019-02-25 15:14:23

转义?没有太明白,直接加斜杠?

0 回复 有任何疑惑可以回复我~
  • %23我的理解进来不应该是这样的,而是加了转移字符后才进来的
    回复 有任何疑惑可以回复我~ 2019-02-25 15:18:43
  • 提问者 慕前端5264115 回复 Michael_PK #2
    线上的日志确实是对数据作了encode存储的,我拿到数据后需要先decode,但是decode未生效
    回复 有任何疑惑可以回复我~ 2019-02-25 17:42:31
  • Michael_PK 回复 提问者 慕前端5264115 #3
    写个单元测试看看为什么decode无效,是否是代码问题
    回复 有任何疑惑可以回复我~ 2019-02-25 17:51:52
Michael_PK 2019-02-25 15:10:22

特殊字符是要使用转义的

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信