所有涉及数据源显示都涉及原始数据的字符集编码和客户端语言环境的设置。
那么在spark-sql环境,只要正确的字符集编码和正确的客户端语言环境设置,显示,使用中文,完全不是困难。
#上传的文本文件编码,确认是utf8
[root@slave2 test]# cat city_test.txt
浙江,杭州,300
浙江,宁波,150
浙江,温州,200
浙江,嘉兴,100
江苏,南京,270
江苏,苏州,299
江苏,某市,200
江苏,某某市,100
[root@slave2 test]# file city_test.txt
city_test.txt: UTF-8 Unicode text
[root@slave2 test]# echo $LANG
en_US.UTF-8
[root@slave2 test]#
##############
[root@snn spark]# echo $LANG
en_US.UTF-8
[root@snn spark]# which spark-sql
/opt/hadoop/spark-latest/bin/spark-sql
[root@snn spark]# /opt/hadoop/spark-latest/bin/spark-sql
15/12/20 13:37:35 WARN MetricsSystem: Using default name DAGScheduler for source because spark.app.id is not set.
SET hive.support.sql11.reserved.keywords=false
15/12/20 13:38:56 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
SET spark.sql.hive.version=1.2.1
SET spark.sql.hive.version=1.2.1
spark-sql> show tables;
external_2000w false
external_2000w_new false
external_bz2_tbl_6005 false
external_tar_gz_tbl_6005 false
external_tbl_6005 false
hive_user_info false
pcp false
pcp2 false
pcp2_16787 false
sqoop_test false
tbl_6005 false
test_table_16538 false
test_table_16539 false
Time taken: 3.543 seconds, Fetched 13 row(s)
spark-sql> select * from pcp2;
浙江 杭州 300
浙江 宁波 150
浙江 温州 200
浙江 嘉兴 100
江苏 南京 270
江苏 苏州 299
江苏 某市 200
江苏 某某市 100
Time taken: 17.689 seconds, Fetched 8 row(s)
spark-sql>
#########################################################
有时候需要转码,比如大量文件已经是GBK编码,那么iconv命令是可以转码的。
有时候发现转码后,file <文件名> 命令看到已经改了编码,下载到windows下看,也能看。
这就说明,文本编码已经好了,但是由于显示终端的字符设置不对,导致显示乱码,修改终端的字符显示即可。
为了测试,我把一个文件转成集中编码,设置不同的环境设置进行显示。

本文档展示了在Spark SQL环境中处理中文字符的步骤,包括确认文本文件的UTF-8编码,设置正确的客户端语言环境(如`en_US.UTF-8`),以及在遇到乱码问题时如何排查和解决,如通过`iconv`命令转码和调整终端字符显示设置。
9138

被折叠的 条评论
为什么被折叠?



