我正在尝试分组和计算PigLatin中每个组的术语频率,但是我有一些麻烦要弄清楚如何去做.
我有一个具有以下模式的对象集合:
{cluster_id: bytearray,terms: chararray}
Run Code Online (Sandbox Code Playgroud)
以下是一些样本
(10, smerter)
(10, graviditeten)
(10, smerter)
(10, smerter)
(10, udemærket)
(20, eis feuer)
(20, herunterladen schau)
(20, download gratis)
(20, download gratis)
(30, anschauen kinofilm)
(30, kauf rechnung)
(30, kauf rechnung)
(30, versandkostenfreie lieferung)
(30, kostenlose)
(30, kostenlose)
(30, kostenlose)
Run Code Online (Sandbox Code Playgroud)
我试图得到的结果是这样的
(10, smerter, 3)
(10, graviditeten, 2)
(10, udemærket, 1)
(20, download gratis, 2)
(20, eis feuer, 1)
(20, herunterladen schau, 1)
(30, kostenlose, 3)
(30, kauf rechnung, 2)
(30, anschauen kinofilm, 1)
(30, versandkostenfreie lieferung, 1)
Run Code Online (Sandbox Code Playgroud)
最好的方法是什么?以下代码按ID分组并计算条款,但我想计算每个组的条款.
by_clusters = GROUP sample_data by cluster_id;
by_clusters_terms_count = FOREACH by_clusters GENERATE group as cluster_id, COUNT($1);
Run Code Online (Sandbox Code Playgroud)
我像这样进行分组,最后得到一个具有以下模式的对象
by_clusters: {group: bytearray,sample_data: {(cluster_id: bytearray,terms: chararray)}}
Run Code Online (Sandbox Code Playgroud)
现在,我明确了实际计算'sample_data'元组中的术语.我正在考虑嵌套的foreach,但我仍然没有得到它如何在这种情况下应用它.代码将类似于以下内容:
result = FOREACH by_clusters {
--count terms here, I don't know how
-- compiler gives me an error here
c = GROUP $1 BY terms; --
d = FOREACH c GENERATE COUNT(b), group;
GENERATE cluster_id, d;
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误:
错误1200:语法错误,意外符号在'$ 1处或附近
最后,我认为我很接近,但我无法解决它.我不相信在这种情况下我必须编写UDF.
Tib*_*o R 13
我认为你想要做的只是分组cluster_id和terms.
您第一次尝试时非常接近结果,只需添加terms到您的组中:
by_clusters = GROUP sample_data by (cluster_id, terms);
by_clusters_terms_count = FOREACH by_clusters GENERATE FLATTEN(group) as (cluster_id, terms), COUNT($1);
Run Code Online (Sandbox Code Playgroud)
我希望我能理解你想要的东西!
| 归档时间: |
|
| 查看次数: |
10802 次 |
| 最近记录: |