【发布时间】:2018-05-02 14:43:45
【问题描述】:
我在 Spark(PySpark 和 Pandas)上使用 Python2 来分析有关表情符号使用的数据。我有一个像u'u+1f375' 或u'u+1f618' 这样的字符串,我想分别转换为???? 和????。
我已经阅读了其他几篇 SO 帖子和 unicode HOWTO,试图掌握 encode 和 decode 无济于事。
这不起作用:
decode_udf = udf(lambda x: x.decode('unicode-escape'))
foo = emojis.withColumn('decoded_emoji', decode_udf(emojis.emoji))
Result: decoded_emoji=u'u+1f618'
这最终只能一次性完成,但在我将其应用于我的 RDD 时失败了。
def rename_if_emoji(pattern):
"""rename the element name of dataframe with emoji"""
if pattern.lower().startswith("u+"):
emoji_string = ""
EMOJI_PREFIX = "u+"
for part_org in pattern.lower().split(" "):
part = part_org.strip();
if (part.startswith(EMOJI_PREFIX)):
padding = "0" * (8 + len(EMOJI_PREFIX) - len(part))
codepoint = '\U' + padding + part[len(EMOJI_PREFIX):]
print("codepoint: " + codepoint)
emoji_string += codepoint.decode('unicode-escape')
print("emoji_string: " + emoji_string)
return emoji_string
else:
return pattern
rename_if_emoji_udf = udf(rename_if_emoji)
错误:UnicodeEncodeError: 'ascii' codec can't encode character u'\U0001f618' in position 14: ordinal not in range(128)
【问题讨论】:
-
在 python 2 中,u'u+1f618' 与 ???? 完全一样(概念上)。听起来您的问题可能是某些东西(可能是您的终端?)没有按照您想要的方式渲染角色?您能否详细说明您希望发生的事情、发生的地点以及实际发生的事情?
-
@TomDalton 不,u'\U0001f618' 与 u'????' 相同。
-
为什么不在 unicode 文本上使用简单的
.replace?
标签: python unicode pyspark emoji