【发布时间】:2015-12-18 21:49:51
【问题描述】:
问题:我有一个数据集 A {filed1, field2, field3...},我想先将 A 分组为 field1,然后在每个结果中组,我想做一堆子查询,例如,计算具有field2 == true 的行数,或者计算具有field4 == "some_value" 和field5 == false 的不同field3 的数量等。
我能想到的一些替代方案:我可以编写一个自定义的用户定义聚合函数,该函数接受一个计算过滤条件的函数,但这样我必须为每个查询条件。我也看过countDistinct函数可以实现一些操作,但是不知道怎么用它来实现filter-distinct-count语义。
在 Pig 中,我可以做到:
FOREACH (GROUP A by field1) {
field_a = FILTER A by field2 == TRUE;
field_b = FILTER A by field4 == 'some_value' AND field5 == FALSE;
field_c = DISTINCT field_b.field3;
GENERATE FLATTEN(group),
COUNT(field_a) as fa,
COUNT(field_b) as fb,
COUNT(field_c) as fc,
有没有办法在 Spark SQL 中做到这一点?
【问题讨论】:
标签: apache-spark apache-pig apache-spark-sql