Wanghui-Huang / CQU_bigdata

重庆大学计算机学院“大数据课程群”实验及PPT
143 stars 40 forks source link

实验二: 词频统计与可视化 answersRdd.take(10) 乱码 #4

Closed trevery closed 4 years ago

trevery commented 4 years ago

实验2中 answersRdd.take(10) 输出乱码

环境:CentOS 英文环境

分析应该是编码问题。

image

已经尝试过的解决方案:

  1. 怀疑是否为pyspak编码问题

pyspark相关环境:

>>> import sys
>>> sys.getdefaultencoding()
'utf-8'
>>>

查看文件编码

file /home/hadoop/Experiment/Ex2_WordCount/src/answers.txt
/home/hadoop/Experiment/Ex2_WordCount/src/answers.txt: UTF-8 Unicode text, with very long lines, with CRLF line terminators

两者编码都是utf-8格式。

  1. 怀疑是该文件是在windows编辑的,为CRLF结尾,而linux上是LF结尾。 所以我更改了该文件为LF。
file /home/hadoop/Experiment/Ex2_WordCount/src/answers_macos.txt
/home/hadoop/Experiment/Ex2_WordCount/src/answers_macos.txt: UTF-8 Unicode text, with very long lines

使用该文件加载到spark中,依然乱码。说明不是该问题。

  1. 仍然怀疑是编码问题,但是不知道出错原因在哪里。我的CentOS当时没有选择中文,而选择中文的同学成功了。我怀疑是这个问题。于是我修改了CentOS的环境
    
    $cat /etc/locale.conf

LANG="zh_CN.UTF-8" LANGUAGE="zh_CN.UTF-8:zh_CN.UTF-8:zh_CN" SUPPORTED="zh_CN.UTF-8:zh_CN:zh:en_US.UTF-8:en_US:en" SYSFONT="lat0-sun16"


但是仍然没有解决问题。
Wanghui-Huang commented 4 years ago

感谢反馈,确实应该是编码问题。 我查看了下官方文档,https://spark.apache.org/docs/2.1.0/api/python/pyspark.htmlimage 你可以尝试,设置use_unicode=False

sc.textFile(answers_filePath, use_unicode=False)

如果没有解决,我明天会再跟进下这个问题。

trevery commented 4 years ago

该问题已经解决。

问题原因:

解决方案:

vim /home/hadoop/.zshrc

在最后一行添加

export LC_ALL="en_US.UTF-8"

查看是否添加成功
➜  ~ tail /home/hadoop/.zshrc
# Spark environment
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
export HADOOP_HOME=/usr/local/hadoop
export SPARK_HOME=/usr/local/spark
export PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/lib/py4j-0.10.7-src.zip:$PYTHONPATH
export PYSPARK_PYTHON=python3
export PATH=$HADOOP_HOME/bin:$SPARK_HOME/bin:$PATH

# zh_CN.UTF-8 setting
export LC_ALL="zh_CN.UTF-8"

看到最后一行添加成功后。重载配置

source /home/hadoop/.zshrc

测试能否正常显示中文:

➜  ~ locale
LANG=zh_CN.UTF-8
LC_CTYPE="zh_CN.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_COLLATE="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"
LC_MESSAGES="zh_CN.UTF-8"
LC_PAPER="zh_CN.UTF-8"
LC_NAME="zh_CN.UTF-8"
LC_ADDRESS="zh_CN.UTF-8"
LC_TELEPHONE="zh_CN.UTF-8"
LC_MEASUREMENT="zh_CN.UTF-8"
LC_IDENTIFICATION="zh_CN.UTF-8"
LC_ALL=zh_CN.UTF-8

尝试创建一个中文文件目录

➜  ~ mkdir 大数据
➜  ~ ls
Desktop    Experiment           Pictures          spark-3.0.1-bin-without-hadoop.tgz  VNC-Server-6.7.2-Linux-x64.rpm
Documents  hadoop-2.8.5.tar.gz  Public            Templates                           大数据
Downloads  Music                scala-2.13.3.tgz  Videos

如果不出意外,pyspak中应该可以正常查看中文了。该问题pyspak配置没有问题,问题在于终端无法显示中文输出。