Python2 Spark环境下将Emoji的Unicode字符串转为实际Emoji
解决Python2+Spark中Emoji字符串转义问题
我来帮你搞定这个问题!你之前用unicode-escape解码没效果,核心原因是你的输入字符串格式(比如u'u+1f375')和unicode-escape预期的格式(\u1f375)不匹配,所以解码后还是原字符串。咱们换个思路,直接提取Unicode码点再转换:
步骤1:编写Emoji转换函数
首先写一个处理单个字符串的函数,逻辑很清晰:
- 去掉字符串开头的
u+前缀,提取出十六进制的码点部分 - 将码点字符串转成十六进制整数
- 用Python2的
unichr()函数把整数转换成对应的Emoji字符
def convert_emoji(emoji_str): try: # 提取码点:从u'u+1f375'中获取'1f375' code_point = emoji_str.lstrip(u'u+') # 转十六进制整数后转成字符 return unichr(int(code_point, 16)) except (ValueError, AttributeError): # 处理格式错误的情况,返回原字符串或者自定义值 return emoji_str
步骤2:注册PySpark UDF并应用
把上面的函数注册成Spark UDF,然后在DataFrame上调用:
from pyspark.sql.functions import udf from pyspark.sql.types import StringType # 注册UDF,指定返回类型为StringType decode_udf = udf(convert_emoji, StringType()) # 应用到DataFrame foo = emojis.withColumn('decoded_emoji', decode_udf(emojis.emoji))
额外:Pandas中的处理方式
如果你用Pandas处理这批数据,也可以用apply方法直接调用转换函数:
import pandas as pd # 假设df是你的Pandas DataFrame df['decoded_emoji'] = df['emoji'].apply(convert_emoji)
这样处理后,u'u+1f375'就能正确转换成🍵,u'u+1f618'转换成😘啦!
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

