gpt4 book ai didi

hadoop - 不能在 PigStorage LOAD 中同时使用 -tagPath 和 schema

转载 作者:可可西里 更新时间:2023-11-01 16:10:52 26 4
gpt4 key购买 nike

我对 PigStorage 及其 -tagPath 选项有一个有趣的行为,我不知道我是否做错了什么(模式定义错误?)或如果这是 Pig 中的限制/错误。

我的文件看起来像这样(最基本的,我能想到的):

A
B

现在我可以像这样加载和子选择这个文件了:

vals = LOAD '/user/guest/test.txt'
USING PigStorage(';') AS (char: chararray);

DUMP vals

one_column = FOREACH vals GENERATE char;

DUMP one_column

结果:

(A)
(B)
(A)
(B)

但是,当我尝试使用 -tagPath 获取文件路径时(我在访问整个数据文件夹时需要它),数据被正确加载到第一个变量中,但我无法进行子选择其中的一列。

vals = LOAD '/user/guest/test.txt'
USING PigStorage(';', '-tagPath')
AS (filepath: chararray, char: chararray);

DUMP vals

one_column = FOREACH vals GENERATE char;

DUMP one_column

结果:

(hdfs://sandbox.hortonworks.com:8020/user/guest/test.txt,A)
(hdfs://sandbox.hortonworks.com:8020/user/guest/test.txt,B)
(hdfs://sandbox.hortonworks.com:8020/user/guest/test.txt)
(hdfs://sandbox.hortonworks.com:8020/user/guest/test.txt)

但是,当我第一次读取没有模式的数据,然后使用 FOREACH 添加模式时,它再次正常工作:

vals = LOAD '/user/guest/test.txt'
USING PigStorage(';', '-tagPath');

vals_n = FOREACH vals GENERATE (chararray)$0 AS filepath, (chararray)$1 AS char;

DUMP vals_n

one_column = FOREACH vals GENERATE char;

DUMP one_column

结果:

(hdfs://sandbox.hortonworks.com:8020/user/guest/test.txt,A)
(hdfs://sandbox.hortonworks.com:8020/user/guest/test.txt,B)
(A)
(B)

那么有什么办法,可以在LOAD阶段同时使用-tagPath和schema吗?

最佳答案

发生这种情况是因为 pig 会尝试自动找出脚本中使用了哪些列并仅加载这些列。当我们使用 -tagFile-tagPath 时,这似乎变得困惑了。

解决方案是run the pig script without this column detection :

pig -x mapreduce -t ColumnMapKeyPrune

关于hadoop - 不能在 PigStorage LOAD 中同时使用 -tagPath 和 schema,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31809844/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com