我正在加载的文件由''(空格)分隔.以下是文件.该文件位于HDFS中: -
001 000
001 000
002 001
003 002
004 003
005 004
006 005
007 006
008 007
099 007
Run Code Online (Sandbox Code Playgroud)
1>我正在创建一个外部表并通过发出以下命令加载该文件: -
CREATE EXTERNAL TABLE IF NOT EXISTS graph_edges (src_node_id STRING COMMENT 'Node ID of Source node', dest_node_id STRING COMMENT 'Node ID of Destination node') ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ' STORED AS TEXTFILE LOCATION '/user/hadoop/input';
Run Code Online (Sandbox Code Playgroud)
2>在此之后,我只是通过发出以下命令将表插入另一个文件: -
INSERT OVERWRITE DIRECTORY '/user/hadoop/output' SELECT * FROM graph_edges;
Run Code Online (Sandbox Code Playgroud)
3>现在,当我捕获文件时,字段不会被任何分隔符分隔: -
hadoop dfs -cat /user/hadoop/output/000000_0
Run Code Online (Sandbox Code Playgroud)
输出: -
001000
001000
002001
003002
004003
005004
006005
007006
008007
099007
Run Code Online (Sandbox Code Playgroud)
有人可以帮帮我吗?为什么要删除分隔符以及如何分隔输出文件?
在我试过的CREATE TABLE命令中DELIMITED BY '\t'然后我得到了不必要的NULL列.
任何指针都非常感谢.我正在使用Hive 0.9.0版本.
kgu*_*u87 17
问题是HIVE不允许您指定输出分隔符 - https://issues.apache.org/jira/browse/HIVE-634
解决方案是创建输出的外部表(带分隔符规范)并插入覆盖表而不是目录.
-
假设您在HDFS中有/user/hadoop/input/graph_edges.csv,
hive> create external table graph_edges (src string, dest string)
> row format delimited
> fields terminated by ' '
> lines terminated by '\n'
> stored as textfile location '/user/hadoop/input';
hive> select * from graph_edges;
OK
001 000
001 000
002 001
003 002
004 003
005 004
006 005
007 006
008 007
099 007
hive> create external table graph_out (src string, dest string)
> row format delimited
> fields terminated by ' '
> lines terminated by '\n'
> stored as textfile location '/user/hadoop/output';
hive> insert into table graph_out select * from graph_edges;
hive> select * from graph_out;
OK
001 000
001 000
002 001
003 002
004 003
005 004
006 005
007 006
008 007
099 007
[user@box] hadoop fs -get /user/hadoop/output/000000_0 .
Run Code Online (Sandbox Code Playgroud)
如上所述,带有空格.
Gar*_*n S 12
虽然这个问题已经超过2年了,当时最重要的答案是正确的,但现在可以告诉Hive将分隔数据写入目录.
以下是使用传统^ A分隔符输出数据的示例:
INSERT OVERWRITE DIRECTORY '/output/data_delimited'
SELECT *
FROM data_schema.data_table
Run Code Online (Sandbox Code Playgroud)
现在使用制表符分隔符:
INSERT OVERWRITE DIRECTORY '/output/data_delimited'
row format delimited
FIELDS TERMINATED BY '\t'
SELECT *
FROM data_schema.data_table
Run Code Online (Sandbox Code Playgroud)
Sid*_*Sid 11
我认为使用concat_ws函数可以实现输出;
INSERT OVERWRITE DIRECTORY'/ user/hadoop/output'SELECT concat_ws(',',col1,col2)FROM graph_edges;
在这里,我选择逗号作为列分隔符
| 归档时间: |
|
| 查看次数: |
81016 次 |
| 最近记录: |