2016-08-17 59 views
0

我有一个Hive Table,我正在使用命令行在我的本地写入一个csv文件。我使用下面的代码:Hive to CSV - 特殊字符处理

hive -e 'select * from my_Table' | sed 's/[\t]/,/g' > /home/myfile.csv 

但在输出csv文件,包含特殊字符的记录被分成一个新行不知何故这不应该是这样。

Rohan,Kurunäs à 
korson,[email protected],+1 11 111 18 00,VÃâSTERÃâ¦S,Sweden,SvalgÃ¥ngen 

任何帮助将不胜感激!

+1

看起来像**代码页转换**的问题。 Hadoop可以与UTF-8一起工作,但显然您正在查看CSV的计算机不使用UTF-8。您应该运行'file myfile.csv'来获取诊断信息,然后使用'iconv'实验将UTF-8字符转换为您系统支持的内容(例如Windows-1252)。 –

+0

如果您确实有特殊字符引起换行符,请使用认真的文本编辑器(例如Notepad ++)和十六进制转储功能查看该文件,以识别流氓字符,以便您可以“tr”它们。请注意,硬核Linux用户会使用'od -cx'作为十六进制转储,但显然你不在那里。 –

回答

0

我会推荐使用CTAS创建CSV文件并使用CopyToLocal命令将文件复制到所需的位置。

set mapreduce.job.reduces=1; 
create table mytmptable ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' location 'hdfs://mylocation' as select * from my_Table; 
drop table mytmptable; 

将缩减器的数量设置为1将创建一个文件。