您知道如何解码 PySpark 中下面的“营销事件”列吗?该列中的记录是URL格式的字符串:
+--------------------+------------------------+
|user_id |campaign |
+--------------------+------------------------+
|alskd9239as23093 |MM+%7C+Cons%C3%B3rcios+%|
|lfifsf093039388 |Aquisi%C3%A7%C3%A3o+%7C |
|kasd877191kdsd999 |Aquisi%C3%A7%C3%A3o+%7C |
+--------------------+------------------------+
我知道可以使用 Python 中的 urllib
库来做到这一点。但是,我的数据集很大,将其转换为 pandas 数据框需要很长时间。如何使用 Spark DataFrame 执行此操作?
最佳答案
无需转换为中间 pandas 数据帧,您可以使用 pyspark 用户定义函数(udf)来取消引用
引用的字符串:
from pyspark.sql import functions as F
from urllib.parse import unquote
df.withColumn('campaign', F.udf(unquote, F.StringType())('campaign'))
如果 campaign
列中有 null
值,则必须在取消引用字符串之前进行 null 检查:
f = lambda s: unquote(s) if s else s
df.withColumn('campaign', F.udf(f, F.StringType())('campaign'))
+-----------------+-----------------+
| user_id| campaign|
+-----------------+-----------------+
| alskd9239as23093|MM+|+Consórcios+%|
| lfifsf093039388| Aquisição+||
|kasd877191kdsd999| Aquisição+||
+-----------------+-----------------+
关于dataframe - 如何解码 URL 格式的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72632405/