dataframe - 如何解码 URL 格式的列?

标签 dataframe apache-spark pyspark decode urldecode

您知道如何解码 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/

相关文章:

python - 获取每个索引(行)的列名,以便列值强加于 pandas 中的某些条件

python - 删除 pandas 数据框中少于 6 个月的重叠周期

r - 将分组平均值添加到数据框中的列

apache-spark - 如何判断执行器中的可用内存量

apache-spark - spark datasax cassandra 连接器从沉重的 cassandra 表读取速度慢

scala - Spark 2.2.0 - 加载特定的文件列表

python - Spark : Extracting summary for a ML logistic regression model from a pipeline model

python - 根据索引和列将填充的 DataFrame 合并到掩码中

python-2.7 - 如何为 pyspark 中的 s3 指定服务器端加密?

python - 是否应避免使用 DataFrame 函数 groupBy?