将 java 函数 URLDecoder.decode 应用于 Spark 3 中的整列

Kiw*_*iwy 3 java scala apache-spark

我有一个包含 url 编码字符串的数据框列,例如:

我想做这样的事情:

someDF.withColumn('newcol', URLDecoder.decode( col("mystring"), "utf-8" ))
someDF.show()
|         mystring         |         newcol      |
--------------------------------------------------
| ThisIs%201rstString      | ThisIs 1rstString   |        
| This%20is%3Ethisone      | This is>thisone     |
| and%20so%20one           | and so one          |
Run Code Online (Sandbox Code Playgroud)

我应该怎么做这样的事情,我猜地图功能即将到来,但无法弄清楚如何使用它。

注意:这是一个示例,它不是创建多个替换语句的选项,因为还有许多其他编码字符和列表可能会有所不同,我想使用一种简单可靠的方法来做到这一点。

jxc*_*jxc 6

您可以尝试 SparkSQL 内置函数reflect

reflect(class, method[, arg1[, arg2 ..]]) - 使用反射调用方法。

df = spark.createDataFrame([(e,) for e in ["ThisIs%201rstString", "This%20is%3Ethisone", "and%20so%20one"]], ["mystring"])

df.selectExpr("*", "reflect('java.net.URLDecoder','decode', mystring, 'utf-8') as newcol").show()

+-------------------+-----------------+
|           mystring|           newcol|
+-------------------+-----------------+
|ThisIs%201rstString|ThisIs 1rstString|
|This%20is%3Ethisone|  This is>thisone|
|     and%20so%20one|       and so one|
+-------------------+-----------------+
Run Code Online (Sandbox Code Playgroud)

注意:以上是 Python 代码,你应该可以用 Scala 做同样的事情。