Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.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
Hive 在HDFS上写入数据会弄乱数据_Hive_Hdfs - Fatal编程技术网

Hive 在HDFS上写入数据会弄乱数据

Hive 在HDFS上写入数据会弄乱数据,hive,hdfs,Hive,Hdfs,我试图在HDFS上保存配置单元查询的输出,但数据发生了更改。有什么想法吗 请参见下面的数据和更改的数据。删除文件名之前的空格:) [[正确]:i.stack.imgur.com/DLNTT.png [[混乱]:i.stack.imgur.com/7WIO3.png 如有任何反馈,将不胜感激 提前感谢。看起来您正在将一个数组导入可用的配置单元之一。在内部,配置单元使用ASCII字符002分隔数组中的元素。如果您咨询,您可以看到这是不可打印的字符“文本开始”。看起来您的终端确实打印了不可打印的字符,

我试图在HDFS上保存配置单元查询的输出,但数据发生了更改。有什么想法吗

请参见下面的数据和更改的数据。删除文件名之前的空格:)

[[正确]:i.stack.imgur.com/DLNTT.png

[[混乱]:i.stack.imgur.com/7WIO3.png

如有任何反馈,将不胜感激


提前感谢。

看起来您正在将一个数组导入可用的配置单元之一。在内部,配置单元使用ASCII字符002分隔数组中的元素。如果您咨询,您可以看到这是不可打印的字符“文本开始”。看起来您的终端确实打印了不可打印的字符,通过比较这两个图像,您可以看到002确实将数组中的每一项分隔开

类似地,配置单元将使用ASCII 001分隔行中的每一列,并使用ASCII 003分隔映射键/值和结构字段/值。选择这些值是因为它们不太可能显示在数据中。如果要更改此设置,可以手动指定分隔符。但是,如果将集合项切换为终止符类似于
,那么输入中的任何逗号都将类似于配置单元的集合终止符

除非您需要以人类可读的形式存储数据,并且确保有一个可打印的字符不会与您的终止符冲突,否则我会让它们保持原样。如果您需要读取HDFS文件,您可以始终
hadoop fs-cat/exampleWarehouseDir/exampleTable/*| tr'\002'\t'
以显示以ta分隔的数组项bs.如果您针对配置单元表编写MapReduce或Pig作业,只需知道您的分隔符是什么。从MapReduce学习如何创建和配置单元表是我首先了解这些终止符的方式。如果您在配置单元中执行所有处理,您不必担心终止符是什么(除非它们显示在您的输入数据中)

现在,这将解释为什么在从HDFS读取文件内容时会出现ASCII 002,但看起来是从配置单元命令行界面看到的,该界面应该知道集合终止符(因此使用它们来分隔数组元素,而不是打印它们)。我的最佳猜测是您指定的架构错误,并且表
results
的列是一个字符串,您打算将其设置为数组。这可以解释为什么它继续打印ASCII 002,而不是将其用作集合终止符