Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop 以结尾的行仅支持换行'\n';马上_Hadoop_Hive - Fatal编程技术网

Hadoop 以结尾的行仅支持换行'\n';马上

Hadoop 以结尾的行仅支持换行'\n';马上,hadoop,hive,Hadoop,Hive,我有一些文件,其中列由char(30)分隔,行由char(31)分隔。我之所以使用这些分隔符,主要是因为这些列可能包含换行符(\n),所以配置单元的默认行分隔符对我们没有用处 我试图更改配置单元中的行分隔符,但出现以下错误: 以结尾的行现在只支持换行“\n” 有什么建议吗 写自定义SerDe可以工作吗? 是否有计划在新版本中增强hive中的此功能 谢谢我不确定这是否有帮助,或者这是否是最好的答案,但是当遇到这个问题时,我们最终要做的是将“textinputformat.record.delimi

我有一些文件,其中列由char(30)分隔,行由char(31)分隔。我之所以使用这些分隔符,主要是因为这些列可能包含换行符(\n),所以配置单元的默认行分隔符对我们没有用处

我试图更改配置单元中的行分隔符,但出现以下错误:

以结尾的行现在只支持换行“\n”

有什么建议吗

写自定义SerDe可以工作吗? 是否有计划在新版本中增强hive中的此功能


谢谢

我不确定这是否有帮助,或者这是否是最好的答案,但是当遇到这个问题时,我们最终要做的是将“textinputformat.record.delimiter”映射/减少java属性为所使用的值。在我们的例子中,它是一个字符串“{EOL}”,但对于所有实际用途,它可以是任何唯一的字符串

我们将其设置在直线外壳中,这样我们就可以正确地收回字段。应该注意的是,一旦我们这样做了,我们就尽可能快地将数据转换为Avro,这样我们就不需要向每个用户以及用户的小弟弟解释如何设置{EOL}行分隔符

set textinputformat.record.delimiter={EOL};
下面是完整的示例

#example CSV data (fields broken by '^' and end of lines broken by the String '{EOL}'

ID^TEXT
11111^Some THings WIth 
New Lines in THem{EOL}11112^Some Other THings..,?{EOL}
111113^Some crazy thin
gs

just crazy{EOL}11114^And Some Normal THings.

#here is the CSV table we laid on top of the data
CREATE EXTERNAL TABLE CRAZY_DATA_CSV
(
ID STRING,
TEXT STRING
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\136'
STORED AS TEXTFILE
LOCATION '/archive/CRAZY_DATA_CSV'
TBLPROPERTIES('skip.header.line.count'='1');

#here is the Avro table which we'll migrate into below.
CREATE EXTERNAL TABLE CRAZY_DATA_AVRO
(
ID STRING,
TEXT STRING
)
STORED AS AVRO
LOCATION '/archive/CRAZY_DATA_AVRO'
TBLPROPERTIES ('avro.schema.url'='hdfs://nameservice/archive/avro_schemas/CRAZY_DATA.avsc');

#And finally, the magic is here.  We set the custom delimiter and import into our Avro table.
set textinputformat.record.delimiter={EOL};
INSERT INTO TABLE CRAZY_DATA_AVRO SELECT * from CRAZY_DATA_CSV;

我在sqoop中的提取过程中使用了选项--hive delims replacement“”,这样就可以从列中删除字符\n\001\r