我在使用Pig工作方面相对较新。我有一个巨大的表(3.67 Mil条目),其中包含字段 - id,feat1:value,feat2:value ... featN:value 。其中 id 是文本,feat_i是功能名称,值是给定 id 的功能 i 的值。 由于其稀疏表示,每个元组的特征数可能不同。
例如,这是数据
中3行的示例现在的任务是对具有共同功能的查询进行分组。我应该能够获得任何功能重叠的查询集。 我尝试过几件事。 CROSS和JOINS 会导致数据爆炸,减速器卡住。我不熟悉调整GROUP BY命令。
是否有办法在GROUP BY中编写条件,以便仅选择具有共同特征的查询 对于上面的行,结果将是:
由于
答案 0 :(得分:0)
我无法想到在猪身上做到这一点的优雅方式。根据某些条件,不可能对b进行分组。
但是,您可以对所有关系进行GROUP GROUP并将其传递给UDF,以便将每条记录与其他记录进行比较。不是很可扩展,并且需要UDF,但它可以完成这项工作。
答案 1 :(得分:0)
我会尝试不解析字符串。 如果可能,请将数据读取为两列:ID列和要素列。
然后我会与功能表交叉加入。它本质上是一个看起来像这样的表:
f1
f2
f3
等
在Excel中手动创建并将其加载到HDFS上。
然后我会按功能列进行分组,对于每个功能,我会打印所有ID
基本上,就像这样:features = load ' features.txt' using PigStorage(',') as (feature_number:chararray);
cross_data = cross features, data;
filtered_data = filter cross_data by (data_string_column matches feature_number);
grouped = group filtered_data by feature_number;
然后您可以打印每个功能的所有ID。
唯一的问题是使用Pig存储以外的其他方式读取数据。 但这会将您的交叉连接从3.6M * 3.6M减少到3.6M *(特征数量)。