5行cascalog相当于300行pig?

sc4hvdpw  于 2021-06-04  发布在  Hadoop
关注(0)|答案(4)|浏览(567)

在幻灯片36和37的演示中,cascalog的作者Assert,给定一组名称和年龄的数据,比如:[name age],返回所有大于平均年龄的结果的查询是300行pig。
这是一个有效的Assert吗?真的有几行Pig?
或者他描述的问题比我描述的更严重?
(免责声明-我非常喜欢内森的作品,喜欢克洛朱尔和卡斯卡洛格-我只是想弄清楚一些事实)。

wgxvkvu9

wgxvkvu91#

你误解了他在演讲中所说的话。他的意思是pig中的“平均”实现是300行de java代码,而由宏 predicate 功能实现的cascalog只有5行。他想强调作文的力量。
对不起,我的英语不好,我正在学习

tkqqtvp1

tkqqtvp12#

选择已经在pig中实现的聚合操作可能会混淆消息。
正如@marivas11所指出的,这些幻灯片的一个主题是, predicate 的可组合性是用户定义函数(udf)方法的一个强有力的替代方法,这种方法在其他hadoop抽象中很流行。
可组合性的好处远远超出了代码量的相对差异:
predicate 的复合性降低了moseley/marks 2006中定义的“偶然复杂性”,这有利于软件工程成本
简洁的代码,其结果也非常接近规定的要求;这几乎直接来自于测试驱动开发(tdd)的实践,因为cascalog子查询实际上变成了测试语句——sam ritchie的cascalog midje添加事实和模拟是非常好的
摆脱UDF可以减轻数据团队的一个非常麻烦的问题,他们必须开发复杂的工作流:跨越语言边界从java到pig的dml再回到java意味着异常处理、通知和其他工具变得更加困难——特别是对于大型应用程序,在大型集群上很难解决的问题。。。在cascalog中,所有扩展都停留在同一种语言中(甚至leiningen构建脚本也是clojure语言),因此编译器拥有工作流的完整视图,可以比pig更早地推断问题。
后一点很微妙,但在实践中会转化为$$。在pig中,在应用程序在集群上运行之前,您不会发现许多问题。对于一个大规模的应用程序,这意味着烧钱来测试在编译时或者在提交之前在hadoop客户端上推断出的bug。

bvjveswy

bvjveswy3#

在常规sql中,它很简单-从tablename中选择count(*),其中age>(从tablename中选择avg age)
但它要求底层引擎能够检测到最新的select是独立的子查询(否则它将永远工作)。
把它分成两个操作符应该很简单——一个选择avg age,第二个在上面计算这些操作符。

tzxcd3kk

tzxcd3kk4#

我不认为在pig中会有300行代码。清管器已具备过滤结构和平均评估功能。pig中的代码类似于:

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

注意:我没有尝试这个代码,因为我的机器上没有清管器设置。

相关问题