【问题标题】:Apache Pig store delimitersApache Pig 存储分隔符
【发布时间】:2016-02-25 08:20:07
【问题描述】:

我正在使用 Pig Latin 将值从别名存储到 HDFS。别名在其一个字段中包含一个分号。

dump A;
(Richard & John, 1993)
(Albert, 1994)

显示 HDFS 中数据的表格,但分号使 John 转到下一列。

|姓名 |年份 | |-------------|------| |理查德&amp |约翰 | |阿尔伯特 | 1994 |

尝试像这样使用商店也无法按预期工作:

STORE A INTO '/user/hive/warehouse/test.db/names' using PigStorage('\t');

但即使告诉 PigStore 使用制表符作为分隔符,分号也会破坏表格数据。我该如何解决?

【问题讨论】:

    标签: hadoop apache-pig cloudera


    【解决方案1】:

    我只是在本地创建一个文件假设 a.txt 并将您的数据复制到该文件中。

    (Richard & John, 1993)
    (Albert, 1994)
    

    现在我看到您的数据不是制表符分隔符形式,这就是它在分号部分后拆分的原因。所以为了解决这个问题,我只需要这样的查询

    data = load '/home/hduser/Desktop/a.txt' using PigStorage(',');
    dump data;
    

    我的输出结果是这样的

    ((Richard & John, 1993))
    ((Albert, 1994))
    

    我用这个分割它

    因为您的数据看起来像这样的分隔符。

    注意:我在本地文件系统上运行它。所以要在本地运行它,你必须使用这个命令pig -x local 启动你的猪并给出你的相关路径。

    【讨论】:

    • 在 PigStorage 函数中更改分隔符不起作用。我在创建表中使用的分隔符似乎是 apache pig 正在查找的分隔符。
    【解决方案2】:

    好像创建表有问题。

    create table test.names
    (
    name varchar(40),
    year varchar(40)
    )
    row format delimited fields terminated by '\073'
    lines terminated by '\n';
    

    我使用的分隔符是 \073(分号),所以更改 PigStorage 分隔符没有效果

    我正在使用 \072(双冒号),它现在正在工作。我认为任何其他分隔符都可以工作,只要它不是输入数据中的常见或可能的字符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-25
      • 1970-01-01
      • 1970-01-01
      • 2014-11-05
      相关资源
      最近更新 更多