2

在幻灯片 36 和 37 的演示文稿中,Cascalog 的作者断言,给定一组姓名和年龄的数据,例如:[name age],返回所有大于平均年龄的结果的查询是 300 行 PIG。

这是一个有效的断言吗?真的有多少行PIG?

还是他描述的问题比我描述的更大?

(免责声明——我是 Nathan 的作品、Clojure 和 Cascalog 的忠实粉丝——我只是想弄清楚一些事实)。

4

4 回答 4

5

你误解了他在这个演讲中所说的话。他的意思是,PIG 中的“平均”实现是 300 行 Java 代码,而宏谓词功能实现的 5 行 cascalog。他想强调构图的力量。

PD:对不起我的英语不好,我正在学习;-)

于 2013-01-26T12:10:48.777 回答
2

我认为 PIG 中不会有 300 行代码。PIG 已经具有过滤器构造和 AVG 评估功能。PIG 中的代码类似于:

A = LOAD 'student.txt' AS (name:chararray, age:int);
B = FILTER A BY age > AVG(A.age);

注意:我没有尝试过此代码,因为我的机器上没有 PIG 设置。

于 2013-01-26T07:32:15.747 回答
1

在常规 SQL 中,这是微不足道的 - select count(*) from TableName where age>(select avg age from TableName)
但它要求底层引擎能够检测到最新的选择是独立的子查询(否则它将永远工作)。
将其分为两个运算符应该是微不足道的 - 一个选择平均年龄,第二个 - 在它上面计算这些。

于 2013-01-26T07:28:16.077 回答
0

选择已经在 PIG 中实现的聚合操作可能会混淆消息。

正如@marivas11 所指出的那样,这些幻灯片的一个主题是谓词的可组合性是其他 Hadoop 抽象中流行的用户定义函数 (UDF) 方法的强大替代方案。

可组合性的好处远远超出了代码量的相对差异:

  1. 谓词的可组合性降低了 Moseley/Marks 2006 中定义的“意外复杂性”,这有利于软件工程成本

  2. 结果的简洁代码也非常接近规定的要求;这几乎直接来自测试驱动开发 (TDD) 的实践,因为 Cascalog 子查询有效地成为测试语句——Sam Ritchie 的Cascalog-Midje添加事实和模拟非常好

  3. 摆脱 UDF 为必须开发复杂工作流程的数据团队解决了一个非常棘手的问题:跨越语言边界从 Java 到 Pig 的 DML 再回到 Java 意味着异常处理、通知和其他工具变得更加困难——尤其是对于大型- 规模的应用程序,无论如何都很难在大型集群上进行故障排除......在 Cascalog 中,所有扩展都保持在同一种语言中(甚至 Leiningen 构建脚本也在 Clojure 中),因此编译器可以完整地查看工作流程并且可以比 PIG 更早地推断问题。

后一点很微妙,但在实践中转化为 $$。在 PIG 中,在您的应用程序在集群上运行之前,您不会发现许多问题。对于大型应用程序,这意味着要花钱测试可能在编译时或提交之前在 Hadoop 客户端上推断的错误。

于 2013-02-02T04:18:59.823 回答