hadoop - 如何在超过3个级别的配置单元中加载嵌套集合

标签 hadoop hive bigdata

我正在努力将数据加载到Hive中,定义如下:

CREATE TABLE complexstructure (
id STRING,
date DATE,
day_data ARRAY<STRUCT<offset:INT,data:MAP<STRING,FLOAT>>>
) row format delimited
fields terminated by ','
collection items terminated by '|'
map keys terminated by ':';

day_data字段包含一个很难用load data inpath...加载的复杂结构
我尝试了'\004'^D ...很多选项,但是 map 中的数据没有被加载。

这是我最后的尝试:
id_3054,2012-09-  22,3600000:TOT'\005'0.716'\004'PI'\005'0.093'\004'PII'\005'0.0'\004'PIII'\005'0.0'\004'PIV'\005'0.0'\004'RES'\005'0.0|7200000:TOT'\005'0.367'\004'PI'\005'0.066'\004'PII'\005'0.0'\004'PIII'\005'0.0'\004'PIV'\005'0.0'\004'RES'\005'0.0|10800000:TOT'\005'0.268'\004'PI'\005'0.02'\004'PII'\005'0.0'\004'PIII'\005'0.0'\004'PIV'\005'0.159'\004'RES'\005'0.0|14400000:TOT'\005'0.417'\004'PI'\005'0.002'\004'PII'\005'0.0'\004'PIII'\005'0.0'\004'PIV'\005'0.165'\004'RES'\005'0.0`

在此处发布之前,我尝试了(很多)选项,但此示例不起作用:

HIVE nested ARRAY in MAP data type

我正在使用HDP 2.2中的图像

任何帮助将非常感激

谢谢

卡洛斯

最佳答案

所以最后我找到了一种从java生成文件的好方法。诀窍是Hive使用前8个ASCII字符作为分隔符,但是您只能覆盖前三个。从第四点开始,您需要生成实际的ASCII字符。

经过多次测试,我最终使用HEX编辑器编辑了文件,并插入了正确的值,但是如何在Java中做到这一点?再简单不过了:只需将int转换为char即可生成相应的ASCII字符:

ASCII 4 -> ((char)4)
ASCII 5 -> ((char)5)
...

等等。

希望这可以帮助!!

卡洛斯

关于hadoop - 如何在超过3个级别的配置单元中加载嵌套集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30361935/

相关文章:

Hadoop hive : How to allow regular user continuously write data and create tables in warehouse directory?

hadoop - 我应该在cloudera,MapR和Hortonworks中选择哪个Hadoop发行版?

hadoop - hive :-如何使用正则表达式从给定属性提取数据字符串

hadoop - Webhdfs 返回错误的数据节点地址

hadoop - Hive on Spark : Missing <spark-assembly*. jar>

hadoop - 在单个reducer中写入多个HCatalog模式?

apache-spark - 在Hive-S3表的情况下pyspark命令行错误

shell - 如何添加分号;在每个使用 shell 脚本创建 ddl 语句之后

sql - Hive SQL Integer YYYYMM 前几个月

python - 在Hive数据库中匹配两个字段的最有效方法