【问题标题】:Read tab-delimited data into Hive array将制表符分隔的数据读入 Hive 数组
【发布时间】:2014-09-18 06:17:30
【问题描述】:

我需要的数据格式:

    12cef8e1b711a351        [1377045694501,1377045728475,1377045709652]
    12cf3cb988f10a87        [1380741459591,1380739871201,1380739785397,1380740303830,1380739849591]
    12d1be8adb90a88b        [1375541238666,1375541281821]
    12d29ba61341e7ce        [1377855844089,1377855785342]
    12d2e28e50d42d19        [1381974506104,1381973579872,1377988785664,1381976074258]

我拥有的数据格式 - 一切都是制表符分隔的:

    12cef8e1b711a351      1377045694501       377045728475       1377045709652
    12cf3cb988f10a87      1380741459591       1380739871201      1380739785397     1380740303830     1380739849591
    12d1be8adb90a88b      1375541238666       1375541281821 
    12d29ba61341e7ce      1377855844089       1377855785342 
    12d2e28e50d42d19      1381974506104       1381973579872      1377988785664      1381976074258 

如何处理制表符分隔的数据,以便第一个字段与其余字段用制表符分隔,其他所有内容都以逗号分隔并由 [] 包围。可能每个逗号分隔的项目也必须以“”结尾。

我需要将这些数据读入 Hive 表中

  CREATE TABLE id_timestamps (id STRING, timestamps array<STRING>);

我可以通过一些技巧或 shell 将它直接读取到 Hive 我使用 awk 或 sed 转换制表符分隔的数据吗?请帮忙提供一些建议和食谱。

谢谢!

【问题讨论】:

    标签: csv awk sed hive


    【解决方案1】:

    此 awk 脚本生成所需的格式:

    awk '{printf "%s\t[", $1; for(i=2;i<=NF;++i) printf "%s%s", $i, (i<NF?",":"]\n")}' file
    

    打印第一列,然后是制表符和开头的“[”。打印其余列,后跟一个“,”,除了最后一个,后跟一个“]”和一个换行符。

    测试一下:

    $ awk '{printf "%s\t[", $1; for(i=2;i<=NF;++i) printf "%s%s", $i, (i<NF?",":"]\n")}' file
    12cef8e1b711a351        [1377045694501,377045728475,1377045709652]
    12cf3cb988f10a87        [1380741459591,1380739871201,1380739785397,1380740303830,1380739849591]
    12d1be8adb90a88b        [1375541238666,1375541281821]
    12d29ba61341e7ce        [1377855844089,1377855785342]
    12d2e28e50d42d19        [1381974506104,1381973579872,1377988785664,1381976074258]
    

    【讨论】:

    • 工作就像一个魅力。顺便说一句,为了加载到 Hive,我使用了 CREATE TABLE ... ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' COLLECTION TERMINATED BY ',' LINES TERMINATED BY '\n' STORED AS TEXTFILE;我想知道我是否可以为 FIELDS 和 COLLECTION 设置相同的分隔符?然后我可以完全跳过这一步并加载到 Hive。
    • 我很高兴它对你有用。不幸的是,我对 Hive 一点也不熟悉,所以我不知道如何回答您的进一步问题。如果您的原始问题已解决,请考虑接受我的回答,如果您觉得它有用,请点赞。如果您对 Hive 更具体的问题感到困惑,那么您可以提出一个新问题。
    猜你喜欢
    • 2012-04-01
    • 2013-11-28
    • 2013-09-01
    • 2021-08-26
    • 1970-01-01
    • 1970-01-01
    • 2017-03-04
    • 2016-05-09
    • 2013-10-13
    相关资源
    最近更新 更多