Я использую Python2 на Spark (PySpark и Pandas) для анализа данных об использовании смайликов. У меня есть строка типа u'u+1f375'
или u'u+1f618'
, которую я хочу преобразовать в ?
и ?
соответственно.
Я прочитал несколько других сообщений SO и Юникод 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)