gpt4 book ai didi

hadoop - HIVE 分隔符\n ^M ​​问题

转载 作者:可可西里 更新时间:2023-11-01 14:21:48 25 4
gpt4 key购买 nike

我有一个文件,其列由 ^A 分隔,行由 '\n' 换行符分隔。

我首先将它上传到 HDFS,然后使用如下命令在 Hive 中创建表:

CREATE EXTERNAL TABLE 
IF NOT EXISTS
html_sample
( ts string,
url string,
html string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\001'
LINES TERMINATED BY '\n'
LOCATION '/tmp/directoryname/';

但是,当我为该表执行 select 语句时。原来是一团糟。

表格如下所示:

ts              url                    html
10082013 http://url.com/01 <doctype>.....style="padding-top: 10px;
text-align... NULL NULL
text-align... NULL NULL
text-align... NULL NULL
10092013 http://url.com/02 <doctype>.....style="padding-top: 10px;
text-align... NULL NULL
text-align... NULL NULL
text-align... NULL NULL

然后我回到文本文件,发现文件中存在几个 ^M 字符,这使得 HIVE 将 ^M 视为换行符。

当我第一次创建文件时,我特意从 html 中删除了所有换行符,以保证每条记录都是一行。但是,我只是无法理解 HIVE 究竟如何将 ^M 视为换行符。我怎样才能在不修改我的文件的情况下解决这个问题。

(我知道在 VI 或 sed 中进行全局替换是可能的……但对我来说这没有多大意义,HIVE 如何将 ^M 视为\n)

最佳答案

^M 是 Vim 显示 Windows 行尾的一种方式。这里有更多关于这个: What does ^M character mean in Vim?

Hive 反过来使用 TextInputFormat,它恰好将其视为有效的行终止符。

根据您使用的 Hadoop 和 Hive 的版本,可以有不同的方法来克服这个问题(从更改配置中的属性到自定义 InputFormat 实现)。

只需找到一种明确指定分隔符的方法即可。

是的,LINES TERMINATED BY '\n' 并不像它看起来的那样。我正在使用 Hive 0.11 并且唯一可能的值实际上是 '\n' 但它没有提升为 TextInputFormat

关于hadoop - HIVE 分隔符\n ^M ​​问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19211924/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com