gpt4 book ai didi

hadoop - 使用元组的字段加载 pig 文件

转载 作者:行者123 更新时间:2023-12-02 20:04:55 27 4
gpt4 key购买 nike

我需要以下用例的帮助:

最初,我们加载一些文件并处理这些记录(或更严格地说是元组)。经过此处理后,最终我们具有以下形式的元组:

(some_field_1, hdfs://localhost:9000/user/kailashgupta/data/1/part-r-00000, some_field_3)
(some_field_1, hdfs://localhost:9000/user/kailashgupta/data/2/part-r-00000, some_field_3)
(some_field_1, hdfs://localhost:9000/user/kailashgupta/data/1/part-r-00001, some_field_3)

因此,基本上,元组将文件路径作为其字段的值(显然,我们可以将只有一个字段以文件路径为值的这个元组转换为一个只有一个带有定界符(例如逗号)的字段的元组)。

因此,现在我必须以Pig脚本加载这些文件,但是我无法这样做。您能否提出进一步的建议。我考虑使用高级 foreach运算符,并尝试如下:
data = foreach tuples_with_file_info {
fileData = load $2 using PigStorage(',');
....
....
};

但是它不起作用。

编辑:
为了简单起见,假设我有一个元组,其中一个字段具有文件名:
(hdfs://localhost:9000/user/kailashgupta/data/1/part-r-00000)

最佳答案

您不能开箱即用使用Pig。

我要做的是使用其他脚本语言(bash,Python,Ruby ...)从hdfs中读取文件,并将文件连接为单个字符串,然后可以将其作为参数推送到Pig脚本中,以便在您的脚本中使用LOAD语句。 Pig支持Globing,因此您可以执行以下操作:

a = LOAD '{hdfs://localhost:9000/user/kailashgupta/data/1/part-r-00000,hdfs://localhost:9000/user/kailashgupta/data/2/part-r-00000}' ...

因此,剩下要做的就是读取包含这些文件名的文件,并将它们连接到一个glob中,例如:
{hdfs://localhost:9000/user/kailashgupta/data/1/part-r-00000,hdfs://localhost:9000/user/kailashgupta/data/2/part-r-00000}

并将其作为参数传递给Pig,以便您的脚本以以下内容开头:
a = LOAD '$input'

和您的 pig 叫看起来像这样:
pig -f script.pig -param input={hdfs://localhost:9000/user/kailashgupta/data/1/part-r-00000,hdfs://localhost:9000/user/kailashgupta/data/2/part-r-00000}

关于hadoop - 使用元组的字段加载 pig 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26044796/

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