pig:如何为数据子集的列添加新值?

zi8p0yeb  于 2021-06-21  发布在  Pig
关注(0)|答案(1)|浏览(261)

我有一些数据如下:

  1. patient_id lab_value
  2. 1, 10
  3. 1, 3
  4. 2, 1
  5. 2, 4
  6. 3, 5
  7. 3, 10
  8. 3, 2

我想做的是找到每个患者id分组的最大实验室值,然后最终计算实验室值和最大值之间的差异,如下所示。

  1. patient_id lab_value lab_diff
  2. 1, 10, 0
  3. 1, 3, 7 (10 - 3)
  4. 2, 1, 3
  5. 2, 4, 0
  6. 3, 5, 5 (10 - 5)
  7. 3, 10, 0
  8. 3, 2, 8 (10 - 2)

我该怎么做?

e0bqpujr

e0bqpujr1#

步骤
加载数据
按id分组
获取每个id的最大实验室值
用最大值区分每个组
基于id以最大实验室值联接数据
从最大值-实验室值生成差异值
Pig手稿

  1. A = LOAD 'test1.txt' USING PigStorage(',') AS (id:int, lab_value:int);
  2. B = GROUP A BY id;
  3. C = FOREACH B GENERATE group as id,MAX(A.lab_value) as max_value;
  4. C1= DISTINCT C;
  5. D = JOIN A BY id,C1 BY id;
  6. E = FOREACH D GENERATE A::id,A::lab_value,(C1::max_value - A::lab_value) as diff_value;
  7. DUMP E;

结果

展开查看全部

相关问题