Python中使用Spark统计波斯语文本单词遇字符编码异常如何解决
解决PySpark统计波斯语文本单词计数的编码问题
问题根源
- 逻辑错误:
words = words.flatMap(lambda x : x[0])这行代码会把拆分好的每个单词截断为第一个字符,完全无法实现单词计数的需求 - 编码过滤:
cleanWord = word.encode("ascii","ignore")强制把所有字符转ASCII编码,波斯语属于非ASCII字符,会被直接过滤掉,这是波斯语无法统计的核心原因 - 读文件未指定编码:PySpark读取文本时未显式指定UTF-8编码,可能出现乱码导致后续处理异常
修复后可正常统计波斯语的代码
from pyspark import SparkConf,SparkContext conf = SparkConf().setMaster("local").setAppName("TestSpark") sc = SparkContext(conf= conf) # 读取文件时显式指定UTF-8编码,保证波斯语正确解码 input = sc.textFile("c:\\spark\\test_text.txt", use_unicode=True, encoding='utf-8') # 按空格拆分单词,删除原来错误的取单个字符的操作 words = input.flatMap(lambda x : x.split()) wordsCount = words.countByValue() # 直接输出原字符,不需要做ASCII编码转换 for word, count in wordsCount.items(): print(f"{word} {count}")
注意事项
如果运行时控制台输出波斯语为乱码,需要调整控制台的默认编码为UTF-8即可正常显示。
内容的提问来源于stack exchange,提问作者emran
相关产品推荐
相关产品推荐

