0

我正在从我的配置单元表/视图中选择数据,但 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.

如果有人知道我做错了什么,或者我需要设置任何参数来读取正确的字符集,请告诉我我已经在 spark shell 中尝试过 java nio 字符集,但没有任何结果。请指导我,对 Hadoop 很陌生。在选择数据之前,有没有办法可以通过命令行将字符集传递给直线或 spark-shell?

4

2 回答 2

2

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

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

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

于 2019-01-14T21:51:38.583 回答
1

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

于 2019-01-11T19:40:09.137 回答