在 Pig 中将一个元组拆分为多个元组

2023-11-26

我喜欢从单个元组生成多个元组。我的意思是: 我有包含以下数据的文件。

>> cat data
ID | ColumnName1:Value1 | ColumnName2:Value2

所以我通过以下命令加载它

grunt >> A = load '$data' using PigStorage('|');    
grunt >> dump A;    
(ID,ColumnName1:Value1,ColumnName2:Value2) 

现在我想把这个元组分成两个元组。

(ID, ColumnName1, Value1)
(ID, ColumnName2, Value2)

我可以将 UDF 与 foreach 和 generated 一起使用吗?像下面这样的东西?

grunt >> foreach A generate SOMEUDF(A)

EDIT:

输入元组:(id1,列1,列2) 输出:两个元组(id1,column1)和(id2,column2),所以它是列表还是我应该返回一个包?

public class SPLITTUPPLE extends EvalFunc <List<Tuple>>
{
    public List<Tuple> exec(Tuple input) throws IOException {
        if (input == null || input.size() == 0)
            return null;
        try{
            // not sure how whether I can create tuples on my own. Looks like I should use TupleFactory.
            // return list of tuples.
        }catch(Exception e){
            throw WrappedIOException.wrap("Caught exception processing input row ", e);
        }
    }
}

这种做法正确吗?


您可以编写 UDF 或使用具有内置函数的 PIG 脚本。

例如:

-- data should be chararray, PigStorage('|') return bytearray which will not work for this example
inpt = load '/pig_fun/input/single_tuple_to_multiple.txt' as (line:chararray);

-- split by | and create a row so we can dereference it later
splt = foreach inpt generate FLATTEN(STRSPLIT($0, '\\|')) ;

-- first column is id, rest is converted into a bag and flatten it to make rows
id_vals = foreach splt generate $0 as id, FLATTEN(TOBAG(*)) as value;
-- there will be records with (id, id), but id should not have ':'
id_vals = foreach id_vals generate id, INDEXOF(value, ':') as p, STRSPLIT(value, ':', 2) as vals;
final = foreach (filter id_vals by p != -1) generate id, FLATTEN(vals) as (col, val);
dump final;

测试输入:

1|c1:11:33|c2:12
234|c1:21|c2:22
33|c1:31|c2:32
345|c1:41|c2:42

OUTPUT

(1,c1,11:33)
(1,c2,12)
(234,c1,21)
(234,c2,22)
(33,c1,31)
(33,c2,32)
(345,c1,41)
(345,c2,42)

我希望它有帮助。

Cheers.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Pig 中将一个元组拆分为多个元组 的相关文章

随机推荐

  • MySQL 中的存储过程与触发器

    在 MySQL 世界中 存储过程与触发器有何不同 存储过程存储为预编译代码 存储例程 并由程序员在想要触发的任何地方调用 存储过程可以返回值 关于程序和功能 触发器是在发生插入 删除 更新 或其他事件 时自动触发的命名数据库对象 不能显式调
  • bash 在循环中分配给数组索引时遇到问题

    我可以让它在 ksh 中工作 但不能在 bash 中工作 这真的让我发疯 希望这是我忽略的显而易见的事情 我需要运行一个外部命令 其中输出的每一行都将存储在数组索引中 这个简化的示例看起来像是在循环中正确设置了数组 但是在循环完成后 这些数
  • 如何将 Json 字符串转换为 NSArray? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我目前正在尝试将一些对象的 JSON 表示形式转换为NSArray 我用了Res
  • 新的 cassandra 节点无法使用种子进行八卦

    我正在尝试使用 cassandra 2 0 7 启动一个新节点 两个节点均位于 Digital Ocean 种子节点已启动并正在运行 我可以从我尝试启动的节点远程登录到该主机上的端口 7000 root cassandra02 apache
  • pydev 调试器:在 OS 10.8 升级后无法找到 python 2.7 的真实位置

    我刚刚升级到 OS X 10 8 Mountain Lion 但无法理解 pydev 调试器如何在 Aptana 3 0 上工作 在 Aptana 的首选项中 我将 python 解释器设置为 usr bin python 它指出系统库来自
  • Object.GetType() 可以返回 null 吗?

    只是好奇 有什么时间打电话吗 GetType 对象上会返回 null 假设用途 public Type MyMethod object myObject return myObject GetType 对象上的 GetType 永远不会返回
  • 编译具有相同目标的不同子项目时出现 CMP0002 错误

    我有很多子文件夹 home library1 library2 libraryn 每个子文件夹都包含一个可以自行编译的完整库 每个库都有不同的维护器 到目前为止 它工作正常 并且我使用脚本编译它们 现在我需要创建另一个库 它依赖于现有的库
  • 如何使用 Linq 写入 Excel 电子表格?

    我正在编写一个应用程序 需要从数据库中检索一些行并将它们转储到 Excel 电子表格中 我正在使用 Linq 来检索这些行 是否可以将这些行直接转储到 Excel 工作表中的对应行 其中 Excel 中的一个单元格对应于数据库中的一个单元格
  • Primefaces 验证码消失或不更新/刷新无效输入?

    我有以下一段代码h form
  • php8.2 找不到 Redis.dll

    我在 Windows 计算机上使用 PHP 8 2 启动 Redis 5 3 7 时遇到困难 当我尝试启动它时 会显示一个对话框 其中包含以下消息 无法在动态链接库c Program Files php ext php redis dll中
  • jdk1.7的javac在没有-cp选项的情况下找不到javafx jar

    我在这个网站和其他地方读过几个问题 这些问题表明安装 Oracle JDK7 时 不需要指定 jfxrt jar 的类路径当JDK正确安装时 不幸的是 我的安装似乎不正确 但我无法找出问题所在 我为 Red Hat Enterprise L
  • React onChange 处理程序在页面加载期间被多次调用

    我们正在尝试添加一个onChange我们的自定义组件之一的处理程序 即Checkbox组件 它是自定义组件的唯一原因是我们可以有效地封装intermediateHTML 属性 它看起来像这样
  • 即使使用包装类,SwingWorker 异常也会丢失

    我一直在努力解决 SwingWorker 吃掉后台任务中抛出的任何异常的可用性问题 例如 描述的在这个SO线程上 该线程很好地描述了问题 但没有讨论恢复原始异常 我收到的小程序需要向上传播异常 但我什至没能抓住它 我正在使用 SimpleS
  • 解析类 C 定义字符串的最有效方法?

    我有一组用类 C 语言编写的函数定义 其中包含一些附加关键字 这些关键字可以放在某些参数之前 例如与 无符号 或 寄存器 相同的方式 我需要分析这些行以及一些函数存根并从中生成实际的 C 代码 Flex Yacc 是最正确的方法吗 如果我对
  • Python 动态函数名

    我正在寻找一种更好的方法来调用基于 Python 中的变量的函数 而不是使用如下的 if else 语句 每个状态码都有对应的功能 if status CONNECT return connect args kwargs elif stat
  • 如何将 Jsoup 文档转换为 W3C 文档?

    我通过解析内部 HTML 页面构建了一个 Jsoup 文档 public Document newDocument String path throws IOException Document doc null doc Jsoup con
  • Datatables + PHP:多个表的服务器端处理

    如何获取数据表服务器端处理脚本来处理自定义查询 我需要从多个表中选择列并让数据表呈现它们 Datatables net 使用 PHP 的服务器端处理 SSP 总结如下 https datatables net examples server
  • 检测浏览器是否处于全屏模式

    有什么方法可以可靠地检测浏览器是否以全屏模式运行 我很确定没有任何浏览器 API 可以查询 但是有人通过检查和比较 DOM 公开的某些高度 宽度测量值来解决这个问题吗 即使它只适用于某些浏览器 我也有兴趣了解它 Chrome 15 Fire
  • Paho MQTT Android 服务唤醒活动

    我正在尝试使用 Paho Android MQTT 库 从这里下载的 例子服务申请工作正常 订阅和publish当示例应用程序运行时 方法也可以正常工作 当我close它 设备不再接收消息通知 有谁有如何正确修改 实现服务以接收消息的经验
  • 在 Pig 中将一个元组拆分为多个元组

    我喜欢从单个元组生成多个元组 我的意思是 我有包含以下数据的文件 gt gt cat data ID ColumnName1 Value1 ColumnName2 Value2 所以我通过以下命令加载它 grunt gt gt A load