Pig:如何将数据连接到嵌套包中的键上

2024-04-04

我只是想合并来自的值data2 to data1 on the 'value1'/'value2'两者中都可见的键data1 and data2(注意嵌套结构

容易吧?在面向对象的代码中,它是一个嵌套的 for 循环。但在 Pig 中,感觉就像解决魔方一样。

data1 = 'item1'     111     { ('thing1', 222, {('value1'),('value2')}) }
data2 = 'value1'    'result1'
        'value2'    'result2'

A = load 'data6' as ( item:chararray, d:int, things:bag{(thing:chararray, d1:int, values:bag{(v:chararray)})} );
B = load 'data7' as ( v:chararray, r:chararray );

expected: 'item1', 111, {('thing1', 222, {('value1','result1'), ('value2','result2')})}
                                           ^^^^^^^^^^^^^^^^^^    ^^^^^^^^^^^^^^^^^^

对于好奇:data1 来自面向对象的数据存储,这解释了双重嵌套(简单的面向对象格式)。


听起来你基本上只是想做一个连接(从问题中不清楚这是否应该是 INNER、LEFT、RIGHT 还是 FULL。我认为 @SNeumann 基本上已经有了写答案,但我会添加一些代码以使其更清晰。

假设数据如下:

data1 = 'item1'     111     { ('thing1', 222, {('value1'),('value2')}) }
        ...
data2 = 'value1'    'result1'
        'value2'    'result2'
        ...

我会做类似的事情(untested):

A = load 'data6' as ( item:chararray, d:int, things:bag{(thing:chararray, d1:int, values:bag{(v:chararray)})} );
B = load 'data7' as ( v:chararray, r:chararray );
A_flattened = FOREACH A GENERATE item, d, things.thing AS thing; things.d1 AS d1, FLATTEN(things.values) AS value;
--This looks like:
--'item1', 111, 'thing1', 222, 'value1'
--'item1', 111, 'thing1', 222, 'value2'
A_B_joined = JOIN A_flattened BY value, B BY v;
--This looks like:
--'item1', 111, 'thing1', 222, 'value1', 'value1', 'result1'
--'item1', 111, 'thing1', 222, 'value1', 'value2', 'result2'
A_B_joined1 = FOREACH A_B_JOINED GENERATE item, d, thing, d1, A_flattened::value AS value, r AS result;
A_B_grouped = GROUP A_B_joined1 BY (value, result);

从那里开始,按照你喜欢的方式重新装袋应该是微不足道的。

EDIT: 上面应该使用'.'作为元组上的投影运算符。我已经把它切换了。它还假设things是一个大元组,但事实并非如此。这是一袋一件物品。如果OP从不打算在那个包里放多个项目,我强烈建议使用元组代替并加载为:

A = load 'data1' as (item:chararray, d:int, things:(thing:chararray, d1:int, values:bag{(v:chararray)})); 

然后基本上按原样使用其余代码(注意:尚未测试).

如果绝对需要一个包,那么整个问题就会改变,并且当有多个包时,不清楚 OP 想要发生什么things袋子里的物品。如前所述,袋子投影也相当复杂here http://ofps.oreilly.com/titles/9781449302641/intro_pig_latin.html

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

Pig:如何将数据连接到嵌套包中的键上 的相关文章

  • Apache Pig:使用 hadoop fs -text 加载显示正常的文件

    我有名为 part r 000 0 9 0 9 的文件 其中包含制表符分隔的字段 我可以使用查看它们hadoop fs text part r 00000但无法使用 Pig 加载它们 我尝试过的 x load part r 00000 du
  • 在 Pig 中删除单列

    我正在按大约 20 个 ID 的列表过滤表 现在我的代码如下所示 A LOAD ids txt USING PigStorage B LOAD massive table USING PigStorage C JOIN A BY 0 B B
  • 对相关包进行排序

    我有一个 Pig 脚本 它生成了一个关系 A x chararray B y chararray z int 我想根据 B y 对 A 进行排序 但是以下代码给了我错误 语法错误 z 处或附近出现意外符号 output foreach A
  • Apache Pig:本地模式下使用简单 GROUP BY 时出现 OutOfMemory 异常

    当我尝试在一个微小的 3KB 随机生成的示例数据集上执行一个非常简单的 GROUP BY 时 我收到了 Pig 的 OutOfMemory 异常 小猪脚本 cat example pig raw LOAD example data USIN
  • 使用各种语言在 Hadoop 中运行作业的优缺点是什么?

    到目前为止 我一直使用 Pig 或 Java 进行 MapReduce 专门针对 Hadoop 集群运行作业 我最近尝试通过 Hadoop 流使用 Python Map Reduce 这也很酷 所有这些对我来说都有意义 但我对何时想要使用一
  • 将 IN 子句与 PIG FILTER 结合使用

    PIG 支持 IN 子句吗 filtered FILTER bba BY reason not in a b c d 或者我应该把它分成多个 OR Thanks 您可以使用 Apache DataFu 中的以下 udf 代替 这将帮助您避免
  • 运行 HCatalog 时出错

    A LOAD eventnew txt USING HCatalogLoader 2015 07 08 19 56 34 875 主要 错误 org apache pig tools grunt Grunt 错误 1070 无法使用导入解析
  • 在 hadoop 中使用 Pig 中的正则表达式

    我有一个包含用户 tweetid tweet userid 的 CSV 文件 396124436476092416 Think about the life you livin but don t think so hard it hurt
  • 可以使用 PIG 读取的文件格式

    使用PIG可以读取哪些类型的文件格式 如何以不同的格式存储它们 假设我们有 CSV 文件 我想将其存储为 MXL 文件 如何做到这一点 每当我们使用 STORE 命令时 它都会创建目录并将文件存储为part m 00000 我如何更改文件名
  • 从 Java 应用程序中执行 Pig

    是否可以在 Java 应用程序中运行 Apache Pig 作业 而无需分叉外部进程 Pig 和 Hadoop 似乎都是用 Java 编写的 但并不真正提供 Java API 我宁愿在 Java Spring 应用程序中使用这些工具 而不是
  • Pig FILTER 返回我数不清的空袋子

    我正在尝试计算数据集中有多少个值与过滤条件匹配 但当过滤器不匹配任何条目时 我遇到了问题 我的专栏里有很多data结构 但本例中只使用了三个 key 该集合的数据键 不是唯一的 value 记录的浮点值 nominal value 代表标称
  • strsplit 问题 - Pig

    我有以下元组 H1 我想将其 0 拆分为元组 但是我总是收到错误消息 DUMP H1 item32 item31 1 m FOREACH H1 GENERATE STRSPLIT 0 50 ERROR 1000 解析期间出错 第 1 行第
  • Pig Latin:从某个日期范围加载多个文件(目录结构的一部分)

    我有以下场景 小猪版本使用0 70 HDFS 目录结构示例 user training test 20100810
  • 使用 Pig 中的elephantbird 进行 Json 解析

    我无法在 Pig 中解析以下数据 这是 Twitter API 在获取某个用户的所有推文后返回的内容 源数据 我删除了一些数字 以免无意中侵犯任何人的隐私 created at Sat Nov 01 23 15 45 0000 2014 i
  • Pig - 如何迭代一袋地图

    让我解释一下这个问题 我有这行代码 u FOREACH persons GENERATE FLATTEN 0 experiences as j dump u 产生以下输出 id 1 date begin 12 2012 descriptio
  • 猪中的正则表达式匹配

    使用 apache pig 和文本 hahahah my brother just didnt do anything wrong He cheated on a test no way 我试图匹配 我哥哥只是没有做错任何事 理想情况下 我
  • group by 之后的拉丁猪袋到元组

    我有以下带有架构的数据 t0 chararray t1 int t2 int B 4 2 A 2 3 A 3 2 B 2 2 A 1 2 B 1 2 我想生成以下结果 按 t0 分组 并按 t1 排序 A 1 2 2 3 3 2 B 1 2
  • Hive 和 PIG/Grunt shell 挂在 cygwin 上

    我在 Windows 7 机器 32 位 上以本地模式运行 Hadoop 我已将 HIVE PIG Hadoop Java6 全部安装在 C 驱动器上 我使用的 Cygwin 版本 2 819 我已将 C 安装在 cygwin 上 我可以从
  • 处于咕噜模式的猪

    我在windows中安装了cygwin hadoop和pig 配置看起来不错 因为我可以在批处理和嵌入模式下运行 Pig 脚本 当我尝试以 grunt 模式运行 pig 时 发生了一些奇怪的事情 让我解释 我尝试运行一个简单的命令 例如 g
  • 使用 PIG 从 Hive 表解析嵌套 XML 字符串

    我正在尝试使用 PIG 从 Hive 表中的字段而不是从 XML 文件中提取一些 XML 这是我读过的大多数示例的假设 XML 来自排列如下的表 ID XML string XML 字符串包含 n 行 始终包含最多 10 个属性中的至少一个

随机推荐

  • 是否有像 pygccxml 一样的 Python Clang 包装器来包装 GCC-XML?

    很长一段时间以来 我一直在使用 pygccxml 来解析和内省我的 C 源代码 它帮助我在构建过程中进行一些巧妙的代码生成 最近我读了很多关于 LLVM 堆栈的好处 特别是 LLVM Clang 解析器给 C 编译带来的好处 我现在想知道
  • 如何在 Debian 上升级 glibc?

    我听说我可以使用apt get install libc6 但我需要向 etc apt sources list 添加一些内容才能接收最新的 glibc 版本 我应该怎么办 我能够安装libc6 2 17 in Debian Wheezy通
  • 3D饼图:图例太大

    传说的问题太大了 当我改变cex的数量时 字体太小 盒子仍然很大 希望盒子和测试可以搭配 不会太小也不会太大 table lt data frame num c 90 26 28 39 98 countries c India Sri La
  • Parse.com:如何为 Fragment 内的 Parse ListView 添加搜索过滤器

    我正在尝试为选项卡片段内的 ListView 添加搜索过滤器 使用适配器从解析服务器调用数据 我的片段java文件如下 跑车 java import android os Bundle import android text Editabl
  • 如何使 Hibernate @Lock 注释适用于 Oracle DB?

    我偶然发现 Oracle DB 中锁定行的问题 锁的目的是防止多个事务从数据库读取数据 因为这些数据会影响新数据的生成 并且会在事务中发生更改 为了进行锁定 我将 Lock 注释放在 SpringData find 方法上 该方法检索参与事
  • std::vector 中的每个元素访问都是缓存未命中吗?

    据了解std vector将其数据保存在堆上 因此向量本身的实例和第一个元素具有不同的地址 另一方面 std array是原始数组的轻量级包装 其地址等于第一个元素的地址 假设集合的大小足以容纳一个缓存行int32 在我的具有 384kB
  • 在 WebBrowser 控件中检测滚动到底部

    我正在创建一个 Windows 窗体来接受公司的一些条款和条件 因此 条款和条件位于 Web 上 并通过 WebBrowser 控件导航到 WinForm 仅当完整文档滚动到底部后才需要启用 接受 按钮 我正在寻找类似于 VScrollBa
  • 在 Windows Vista/7 下复制到 Program Files

    我用C 编写了一个向导 它将一些文件安装到Windows下的程序文件文件夹中 据我了解 我需要管理员权限才能在 Vista 7 下写入程序文件 所以我的问题是 有没有一种方法可以在应用程序分别运行时仅针对一个向导页面打开管理员权限 或者我是
  • 巴泽尔的$地点扩张

    我想添加 location 扩展到rules scala for jvm flags我在其中设置依赖项的属性data属性 但失败了 label src java com google devtools build lib worker in
  • CoffeeScript 类在主 javascript 中不可访问

    我有一个用咖啡脚本编写的课程 例如 class Example constructor gt each 1 2 3 key value gt test value return test render gt alert test 我把这个类
  • Mahapps 1.3 对话框和 Avalon.Wizard

    我已经集成了流行的 UI 库Mahapps http mahapps com 与阿瓦隆精灵 https avalonwizard codeplex com 控制 它集成得很好 但我对 Mahapps 对话框有疑问 Wizard 控件定义了一
  • PYPY3——无法安装 Pandas

    我一直在尝试在 PYPY 中安装 pandas 但没有成功 以下是完整的日志消息 Windows 10 64 位操作系统 已安装 Visual C 2015 2019 可再发行组件 Python 3 7 点 19 3 1 通过 Anacon
  • 在中国电话中向上滑动时应用程序后台服务停止

    我一直在寻找有关中国手机 Oppo 华为 小米 Vivo 等 这个问题的答案 当应用程序向上滑动 关闭 时 后台服务停止运行 大多数解决方案是 包含 START STICKY 并使用 AlarmManager 启动服务 以编程方式将用户引导
  • Java Reflection:查找自定义 AbstractProcessor 中的方法用法

    我是反思的新手 有没有办法检测特定方法在哪里被调用 例如 public class MyClass public static void method DO SOMETHING public class Test public test M
  • 如何更改 Emacs 中的草稿消息?

    刮擦消息总是说 This buffer is for notes you don t want to save and for Lisp evaluation If you want to create a file visit that
  • 在不使用服务器套接字的情况下侦听 AS3 (AIR) 客户端中的传入连接

    我设法创建一个 C 服务器 使用它向 AS3 AIR 客户端发送文件sockets 在 AS3 方面我使用的是flash net Socket库通过以下方式接收数据TCP 它是这样工作的 gt 我打开我的服务器 它侦听客户端 另外我可以创建
  • Nextjs 从父目录导入外部组件

    我有外部目录common我想将反应组件从该目录导入到web static In web static我正在使用nextjs 目前我遇到这个错误 Module not found Can t resolve react in Users ja
  • 如何使用 docker Secret 设置属性 spring.cloud.config.server.git.password

    我想对我的 Spring Cloud 配置服务器应用程序进行 docker 化 我正在创建一个 docker 秘密git repo pass保存github账号密码 我正在设置环境SPRING CLOUD CONFIG SERVER GIT
  • 如何在 C 中链接共享对象?

    我制作了一个使用共享对象的简单程序 用以下命令打开它dlopen 我还编译并链接了共享对象 如下所示 gcc o libmylib so libmylib c shared fPIC Wall gcc o program program c
  • Pig:如何将数据连接到嵌套包中的键上

    我只是想合并来自的值data2 to data1 on the value1 value2 两者中都可见的键data1 and data2 注意嵌套结构 容易吧 在面向对象的代码中 它是一个嵌套的 for 循环 但在 Pig 中 感觉就像解