PIG 将文本行转换为稀疏向量

2024-03-21

我必须使用 Apache PIG 将需要合并的文件。第一个文件包含书名列表,就像这样,每个书名都单独一行。

Ted Dunning,  Mahout in Action
Leo Tolstoy,  War and Peace
Douglas Adams, The hitchhiker guide to the galaxy.
James Sununu,  galaxy III for Dummies
Tom McArthur,  The War we went to

第二个文件是单词及其 ID 的列表。像这样

ted, 12
tom, 13
douglas, 14
galaxy, 15
war, 16
leo, 17
peace, 18

我需要连接这两个文件以生成如下输出:

对于“列夫·托尔斯泰,战争与作品”这一行,它应该产生

17:1,16:1,18:1

对于“汤姆·麦克阿瑟,我们参加的战争”这句话,它应该产生

13:1,16:1

换句话说,我需要使用单词作为键来执行连接。到目前为止我已经在pig中编写了以下代码

titles = LOAD 'Titles' AS ( title : chararray );  
termIDs = LOAD  'TermIDs' AS (  term:chararray,id:int);

A = SAMPLE titles 0.01;
X = FOREACH A GENERATE STRSPLIT(title,'[ _\\[\\]\\/,\\.\\(\\)]+');

这给出了加载的两个文件,并且 X 包含 BAGS 列表,每个包包含相应行上出现的术语。像这样:

((ted,dunning,mahout,in,action))
((leo,tolstoy,war,and,peace))

由于周六晚上迟到的原因,我无法在不编写UDF或使用流的情况下找出JOIN步骤的方法。是否有可能仅使用 PIG 原语来完成?


您可以展平 TOKENIZE 的结果,因此所有包都变成行,现在您可以使用 termsID 连接 X 关系。

X = foreach A generate title, flatten(TOKENIZE(title)) as term;
J = join X by (term),  termIDs by (term);
G = group J by title;
Result = foreach G generate group as title, termIDs.id;

上面的代码是在我的手机上敲的,所以没有调试。

更新1:

对于更适合使用 STRSPLIT 而不是 TOKENIZE 的情况,您可以结合使用 FLATTEN 和 TOBAG 来达到与 TOKENIZE 相同的效果,即从 STRSPLIT 返回的元组中获取一袋单词。

SPLT = foreach A generate title, FLATTEN(STRSPLIT(title,'[ _\\[\\]\\/,\\.\\(\\)]+'));
X_tmp = foreach SPLT generate $0 as title, FLATTEN(TOBAG($1..$20)) as term; -- pivots the row
X = filter X_tmp by term is not null; -- this removes the extra bag rows when title was split in less than 20 terms
J = join X by (term),  termIDs by (term) using 'replicated';
G = group J by title;
Result = foreach G generate group as title, termIDs.id;

如果任何标题超过 20 个术语,则增加 TOBAG 中的数量。

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

PIG 将文本行转换为稀疏向量 的相关文章

随机推荐

  • 什么是 href="#" 以及为什么使用它?

    在许多网站上我看到链接href 这是什么意思 它是干什么用的 关于超链接 锚标签的主要用途 a a 是作为超链接 http www w3 org MarkUp html spec html spec 7 html 这基本上意味着他们会带你去
  • 如何在没有 equals/hashcode 的情况下删除 List 中的重复对象?

    我必须删除列表中重复的对象 它是来自博客对象的列表 如下所示 public class Blog private String title private String author private String url private S
  • 从 numpy 数组转换为 RGB 图像

    我有三个 241 241 numpy 数组 我想将它们视为图像的红色 绿色和蓝色分量 我已经尝试过这个 import numpy as np from PIL import Image arr np zeros len x len z 3
  • GWT 模块可能需要(重新)编译 REDUX

    在编译模式下运行时 我收到这个可怕的 GWT Module mymodule may need to be re compiled 对话框消息 我已经编制了一份其他人建议在编译模式下运行的 GWT 给出此错误消息时建议尝试的操作列表 我已经
  • 如何将变量传递给 MySQL LIMIT 子句?

    我正在尝试使用 pymysql 对 Mysql 数据库执行 SELECT 语句 这是代码 我将一个变量传递给 select 语句 令我惊讶的是 这是一个巨大的痛苦 知道我在这里缺少什么吗 def getUrlFromDatabase n s
  • 无法删除 MemoryMappedFile 的文件

    以下代码抛出此异常 该进程无法访问文件 filename 因为它正在被另一个进程使用 很公平 但是关闭阅读器和 或 mmf 以便删除文件的正确方法是什么 我认为 MemoryMappedFile 会有一个 close 方法或类似的方法 但事
  • onHashChange 在 Safari 中工作吗?

    Does onHashChange or hashChange在 Safari 中工作 我在 Windows 7 上使用 Safari 4 0 4 进行了测试 但它对我不起作用 如果不起作用 是否有任何解决方案可以跟踪hash已经改变 在我
  • 如何在黑莓中创建选项卡栏应用程序用户界面...?

    如何在 BB 中制作选项卡栏基础应用程序 应用程序的每个屏幕都将有此选项卡 并且每个选项卡将有单独的导航控制器堆栈 以便我们可以轻松地推送屏幕 您必须使用水平字段管理器创建选项卡栏 然后将字段添加到水平字段管理器 然后将管理器设置为屏幕的标
  • 将 DataGrid 列标题居中对齐

    我需要对齐WPF DataGrid Column Header发短信至Center 我创建了一个样式并使用HeaderStyle属性如下 Style
  • Log4Net 不工作

    我正在 Windows XP 中以管理员用户身份使用 C 开发 NET Framework 3 5 并使用 log4net 进行 NET Framework 2 0 二进制引用 我曾尝试过log4net 缺少什么 未创建日志文件 https
  • TCPDF:HTML 表格和分页符

    I am creating a large HTML table and I have problem with page breaks as you can see in the following image Is there a me
  • 获取准确的窗口区域大小 - CreateWindow 窗口大小不是正确的窗口大小

    在尝试用 C 创建窗口并绘制窗口大小与我设置的大小不匹配的矩形时 我注意到一些非常烦人的事情 例如 如果我设置 480x240 窗口并尝试通过获取 GetWindowRect hwnd rect 从上到下 从左到右绘制矩形并计算宽度和高度
  • jQuery Post blob 对象给出 Uncaught TypeError:非法调用

    我正在尝试使用 jQuery 发布文件post 并得到TypeError Illegal invocation function fbUpload token var dataURL canvas toDataURL image jpeg
  • 我的 java 程序正在运行编译但没有显示任何内容

    package myproj import java sql Connection import java sql DriverManager import java sql PreparedStatement import java sq
  • 使用 Javascript 检查测验答案的最安全方法

    在努力完成一个使用 AJAX PHP 设计匹配问答游戏的项目后 我了解到我公司用于分发其产品的学习套件不允许我在后端运行服务器端脚本来安全地检查答案 这都是由于不幸的等级专制造成的 长话短说 我必须以某种方式检查客户端的答案 或找出一些棘手
  • 使用 DinkToPdf 分隔分页符

    我的 Program cs 中有这个 C var page plain var slnpath Directory GetCurrentDirectory var htmlpath slnpath HtmlTemplates page ht
  • Ruby:在代码块中更改类静态方法

    给定 Thread 类及其当前方法 现在在测试中 我想这样做 def test alter current thread Thread current a stubbed method do something that involve t
  • 如果表尚不存在则创建

    我正在尝试创建一个表 如果它尚不存在 我目前正在检查它是否存在于DBA TABLES首先 如果该查询没有返回任何内容 则插入 有没有办法只签入同一条语句 这样我就不必将其分解为单独的查询 这就是我目前所拥有的 BEGIN SELECT CO
  • AWS DynamoDB Objective C 中递增 Number 属性

    我正在努力增加已保存在 DynamoDB 上的表中的项目的数字属性值 我的代码当前是 AWSDynamoDBUpdateItemInput updateItemInput AWSDynamoDBUpdateItemInput new upd
  • PIG 将文本行转换为稀疏向量

    我必须使用 Apache PIG 将需要合并的文件 第一个文件包含书名列表 就像这样 每个书名都单独一行 Ted Dunning Mahout in Action Leo Tolstoy War and Peace Douglas Adam