Вопрос, который у меня есть, есть функция сборки в свинге, чтобы перетасовать кортеж/сумку?Имеет ли Pig функцию перетасовки?
raw_record = LOAD '$inputPath' -- USING com.test.parser.TestParser;
record_project = FOREACH raw_record GENERATE
field1,
field2,
field3,
field4;
sl_record = FILTER record_project BY (field1=='1' OR field1=='2');
split sl_record into rec1 if field1=='1',rec2 if field1=='2';
rec2Sample = SAMPLE rec2 $samplingRate;
finalRec1 = FOREACH rec1 GENERATE
-1,
1,
field1,
field2,
field3,
field4;
finalRec2 = FOREACH rec2 GENERATE
1,
1,
field1,
field2,
field3,
field4;
unionRec = UNION finalRec1, finalRec2;
STORE unionRec INTO '$outputPath' USING PigStorage(',');
В приведенном выше примере проблема с объединением, я видеть все finalRec1 следуют все finalRec2. Мне нужно, чтобы это было перетасовано или смешано.
Подход, который я взял, чтобы решить это:
raw_record = LOAD '$inputPath' -- USING com.test.parser.TestParser;
record_project = FOREACH raw_record GENERATE
field1,
field2,
field3,
field4;
sl_record = FILTER record_project BY (field1=='1' OR field1=='2');
split sl_record into rec1 if field1=='1',rec2 if field1=='2';
rec2Sample = SAMPLE rec2 $samplingRate;
finalRec1 = FOREACH rec1 GENERATE
-1,
1,
field1,
field2,
field3,
field4,
(chararray)RANDOM() AS id;
finalRec2 = FOREACH rec2 GENERATE
1,
1,
field1,
field2,
field3,
field4,
(chararray)RANDOM() AS id;
unionRec = UNION finalRec1, finalRec2;
mixedRec = ORDER unionRec BY id ASC
STORE mixedRec INTO '$outputPath' USING PigStorage(',');
Таким образом, я был в состоянии смешать их, но теперь я не могу написать тест блока свинью. Есть ли способ, которым я могу перетасовать unionRec напрямую, а также написать тест на свиное устройство?
Тест:
@Test
public void myPigUnitTest {
String []inputs=new String[] {
"inputPath=/src/test/resource/testFile.txt",
"samplingRate=1",
"outputPath=dummy"
};
PigTest pigTest = PigUnitUtil.createPigTest("pathToMyPigFile",inputs);
String [] expectedUnion;
String [] expectedMixedRec;
pigTest.assertOutput("unionRec",expectedUnion);
pigTest.assertOutput("mixedRec",expectedMixedRec);
}
Здесь проблема заключается в том, что unionRec и mixedRec имеют случайное число, а также существует порядок для смешанного перепутались.
Можете ли вы уточнить часть _unit test_? Почему ты не можешь написать его? –
@MarekGrzenkowicz проблема случайная часть, которая не может быть определена. Я также обновлю вопрос с помощью моего модульного теста. – StackFlowed