Select 使用来自 hive 的 utf-8 字符编码的数据

Select data using utf-8 character encoding from hive

我正在从我的配置单元中选择数据 table/view 但是字符编码没有被 spark-shell 或直线选择,但是如果我从 Ambari 中选择相同的数据(直接通过Hive),但出于安全原因,从命令行 Hive 已被禁用。 请看以下数据:

Ambari Data:

•Construction Maintenance 
• 524 N. Martin Luther King Jr.
‘SS-MN-BAE – Other’
¿NPM¿ GOVT/GS SCD US ARM
¿MCCRAY,LORENZO

beeline data:
?Construction Mai...
? 524 N. Martin L...
?SS-MN-BAE ? Other?
?NPM? GOVT/GS SCD...
?MCCRAY,LORENZO

Spark-shell Data:
?Construction Mai...
? 524 N. Martin L...
?SS-MN-BAE ? Other?
?NPM? GOVT/GS SCD...
?MCCRAY,LORENZO
using spark shell I did
 sql("select * from test.ACCOUNT order by customer_name desc").show()

Same select is issued in beeline and ambari.

如果有人知道我做错了什么或者我需要设置任何参数来读取正确的字符集,请告诉我我已经尝试过 java nio charset in spark shell但没有成功。请指导我,Hadoop 的新手。有没有一种方法可以在选择数据之前通过命令行将字符集传递给 beeline 或 spark-shell?

这不是 Hive 问题,而是文件系统或文件编码问题。 SELECT * 在 Hive 中实际上除了从文件系统读取文件外什么都不做。因此,如果您 运行 基础文件上的 hadoop fs cat,您应该会看到相同的行为。

为了以正确的编码读取 linux 中的数据,在登录到 linux 后,我在我的配置文件中使用以下变量设置了字符类型:

export LANG="pt_PT.utf8"
export LC_ALL="pt_PT.utf8"

并重新加载配置文件,如果它 bash_profile 然后 . .bash_profile 如果它只是配置文件然后 . .profile