【问题标题】:Import mixed data (string and array of strings) with hive使用 hive 导入混合数据(字符串和字符串数组)
【发布时间】:2015-04-21 17:06:52
【问题描述】:

我正在尝试使用 hive 导入这种类型的一些数据:

2015-0-6,值1

2015-0-9,value1,value2,value3

我尝试过这些方法

CREATE TABLE fields (timestamp STRING, fields_array ARRAY<STRING>)
ROW FORMAT DELIMITED
    FIELDS TERMINATED BY ','
    LINES TERMINATED BY '\n';

CREATE TABLE fields (timestamp STRING, fields_string STRING)
ROW FORMAT DELIMITED
    FIELDS TERMINATED BY ','
    LINES TERMINATED BY '\n';

但只有时间戳和第一个值存储在表中。 例如:

2015-0-6 价值1

2015-0-9 价值1

为什么?

【问题讨论】:

    标签: csv hadoop hive


    【解决方案1】:

    你需要像这样定义一个python脚本:

    import sys
    
    for line in sys.stdin:
        splitLine=line.strip().split(',', 1)
        print "%s\t%s" % (splitLine[0], splitLine[1])
    

    在你的 hql 类型中

    CREATE TABLE 字段(时间戳 STRING、fields_string STRING)行格式 由 '\t' 终止的分隔字段;

    添加文件 /your_script_path/script.py;

    INSERT OVERWRITE TABLE 字段 SELECT TRANSFORM(line) USING 'python script.py' AS 时间戳,字段 FROM your_table_in_which_you_have_one_column_call_LINE ;

    【讨论】:

      【解决方案2】:

      尝试使用本博客中介绍的 SerDe。我认为它接近您的要求。 https://bigdatamusings.wordpress.com/2014/08/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-08-31
        • 2013-09-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多