You are on page 1of 6

/////////////////

package com.subassemly;
import
import
import
import
import
import

cascading.pipe.Each;
cascading.pipe.Every;
cascading.pipe.GroupBy;
cascading.pipe.Pipe;
cascading.pipe.SubAssembly;
cascading.tuple.Fields;

public class Agg_SubAssembly extends SubAssembly{


public Agg_SubAssembly(Pipe p1)
{
Pipe p2=new GroupBy(p1, new Fields("roll no"));
p2=new Every(p2,Fields.ALL,new Custom_Aggregator(),Fields.RESULT
S);
setTails(p2);
}
}

///////////////////////
package com.subassemly;
import
import
import
import
import
import
import
import

cascading.flow.FlowProcess;
cascading.operation.BaseOperation;
cascading.operation.Function;
cascading.operation.FunctionCall;
cascading.operation.OperationCall;
cascading.tuple.Fields;
cascading.tuple.Tuple;
cascading.tuple.TupleEntry;

@SuppressWarnings("serial")
public class CalculateGrade extends BaseOperation implements Function
{
public CalculateGrade() {
// TODO Auto-generated constructor stub
//these fields will print in output
//
super(6,new Fields("roll no1","name","maths marks","science mark
s","english marks","percentage","grade"));
super(6,new Fields("roll no1","grade"));
}
public void operate( FlowProcess flowProcess, FunctionCall functionCall )
{
// get the arguments TupleEntry

TupleEntry arguments = functionCall.getArguments();


int percentage=arguments.getInteger("percentage");
System.out.println(percentage);
//String grade=arguments.getString("grade");
String grade=" ";
if (percentage>40 && percentage<59.9)
{
grade="A";
}
else if(percentage>60 && percentage<79.9)
{
grade ="B";
}
else if(percentage>80 && percentage<100)
{
grade="C";
}
//grade="c";
System.out.println(grade);
// create a Tuple to hold our result values
Tuple result = new Tuple();
//result.add(arguments.getInteger("roll no"));
/*result.add(arguments.getInteger("maths marks"));
result.add(arguments.getInteger("science marks"));*/
/*result.add(arguments.getInteger("roll no"));
result.add(arguments.getString("name"));
result.add(arguments.getInteger("maths marks"));
result.add(arguments.getInteger("science marks"));
result.add(arguments.getInteger("english marks"));
result.add(percentage);*/
result.add(arguments.getInteger("roll no"));
result.add(grade);
//result.add(grade);
// insert some values into the result Tuple
// return the result Tuple
functionCall.getOutputCollector().add( result );
}
}
////////////////////
package com.subassemly;
import
import
import
import
import
import
import
import
import
import
import
import
import

cascading.flow.FlowDef;
cascading.flow.local.LocalFlowConnector;
cascading.operation.Identity;
cascading.pipe.CoGroup;
cascading.pipe.Each;
cascading.pipe.Every;
cascading.pipe.GroupBy;
cascading.pipe.HashJoin;
cascading.pipe.Pipe;
cascading.pipe.joiner.LeftJoin;
cascading.scheme.Scheme;
cascading.scheme.local.TextDelimited;
cascading.tap.Tap;

import cascading.tap.local.FileTap;
import cascading.tuple.Fields;

public class Custom_Agg_Main {


public static void main(String[] args)
{
String inputPath1 ="C:\\Users\\DhanashriD\\Documents\\Cascading\\wordcou
nt\\Custom_Subassembly_Inputt.txt";
String outputPath1 ="C:\\Users\\DhanashriD\\Documents\\Cascading\\wordc
ount\\Custom_SubAssembly_outputt.txt";
Fields f1=new Fields("roll no","name","maths marks","science marks","en
glish marks");
Scheme s1=new TextDelimited(f1,",");
Tap srctap1 = new FileTap( s1 , inputPath1 );

Scheme s3=new TextDelimited(true,",");


// Fields common= new Fields("name");
// Fields sinkFields=new Fields("roll no","name","maths marks","science
marks","english marks","percentage");
// Fields sk=new Fields("a","b","c","d","e","f","g","h","i","j","k","l"
,"m","n","o");
Tap sinkTap1 =new FileTap(new TextDelimited(true,","),outputPath1);
Pipe p=new Pipe("p");
Pipe pipe=new Agg_SubAssembly(p);
// sinkfield=sinkfield.append(new Fields("grade"));
// System.out.println( sinkfield.append(new Fields("passed")));
// System.out.println(sinkfield);
Pipe pipe1=new Filter_SubAssembly(pipe);
Pipe pipe2= new FunctionSubAssembly(pipe1) ;
Pipe pipe3 = new Pipe("NewPipe",pipe2);
//Fields dc = new Fields("roll no2", "name2", "maths marks2", "science marks2",
"english marks2", "percentage2", "grade2");
Fields dc = new Fields("roll no2","grade4");
pipe3 = new Each(pipe3,new Identity(dc));
System.out.println(pipe1.getName() + " " + pipe3.getName());
Pipe join = new CoGroup(pipe1,new Fields("roll no"),pipe3,new Fields("roll no2")
,new LeftJoin());
FlowDef fd = FlowDef.flowDef()
.addSource(p, srctap1)
// .addSource(pipe3, srctap1)
.addTailSink(join, sinkTap1);
new LocalFlowConnector().connect(fd).complete();
}}
////////////////////
package com.subassemly;

import
import
import
import
import
import
import

cascading.flow.FlowProcess;
cascading.operation.Aggregator;
cascading.operation.AggregatorCall;
cascading.operation.BaseOperation;
cascading.tuple.Fields;
cascading.tuple.Tuple;
cascading.tuple.TupleEntry;

public class Custom_Aggregator extends BaseOperation implements Aggregator


{

//

String name;
int roll_number;
int s1,s2,s3;
int p1,percentage;
String grade=" ";

public Custom_Aggregator()
{
super(5,new Fields("roll no","name","maths marks","science marks
","english marks","percentage"));
}

@Override
public void aggregate(FlowProcess arg0, AggregatorCall arg1) {
// TODO Auto-generated method stub

//

TupleEntry t=arg1.getArguments();
roll_number =t.getInteger("roll no");
name=t.getString("name");
s1=t.getInteger("maths marks");
s2=t.getInteger("science marks");
s3=t.getInteger("english marks");
grade="A";
p1=(s1+s2+s3)/3;
percentage=p1;
System.out.println("Percentage"+percentage);

}
@Override
public void complete(FlowProcess arg0, AggregatorCall arg1) {
// TODO Auto-generated method stub
Tuple t1=new Tuple();
t1.add(roll_number);
t1.add(name);
t1.add(s1);
t1.add(s2);
t1.add(s3);
t1.add(percentage);
//t1.add(grade);

// insert some values into the result Tuple base


d on the context
// return the result Tuple
arg1.getOutputCollector().add( t1 );
}
@Override
public void start(FlowProcess arg0, AggregatorCall arg1) {
// int sum;
// TODO Auto-generated method stub

}}
///////////////////////
package com.subassemly;
import
import
import
import
import
import

cascading.flow.FlowProcess;
cascading.operation.BaseOperation;
cascading.operation.Filter;
cascading.operation.FilterCall;
cascading.tuple.Tuple;
cascading.tuple.TupleEntry;

public class Custom_Filter extends BaseOperation implements Filter


{
public boolean isRemove( FlowProcess flowProcess, FilterCall call )
{
// get the arguments TupleEntry
TupleEntry arguments = call.getArguments();
//int sum = arguments.getInteger("maths marks") + arguments.getInteger("science
marks");
Tuple result = new Tuple();
//result.add(arguments.getInteger("roll no"));
//result.add(arguments.getInteger("maths marks"));
//result.add(arguments.getInteger("science marks"));
//result.add(sum);
// initialize the return result
boolean isRemove=false;
// test the argument values and set isRemove accordingly
return (arguments.getInteger("percentage")<40);
//return isRemove;
}
}
////////////////////////////
package com.subassemly;
import
import
import
import
import
import

cascading.pipe.Each;
cascading.pipe.Every;
cascading.pipe.GroupBy;
cascading.pipe.Pipe;
cascading.pipe.SubAssembly;
cascading.tuple.Fields;

public class Filter_SubAssembly extends SubAssembly{


public Filter_SubAssembly(Pipe p4)
{
Pipe p3=new Each(p4,new Custom_Filter());
setTails(p3);
}
}
/////////////////////////
package com.subassemly;

import
import
import
import

cascading.pipe.Each;
cascading.pipe.Pipe;
cascading.pipe.SubAssembly;
cascading.tuple.Fields;

public class FunctionSubAssembly extends SubAssembly{


public FunctionSubAssembly(Pipe p5)
{
Pipe newPipe=new Each(p5,Fields.ALL,new CalculateGrade(),Fields
.RESULTS);
setTails(newPipe);
}
}
///////////////////////
package com.subassemly;
import
import
import
import
import
import

cascading.pipe.CoGroup;
cascading.pipe.Each;
cascading.pipe.HashJoin;
cascading.pipe.Pipe;
cascading.pipe.SubAssembly;
cascading.tuple.Fields;

public class JoinSubAssembly extends SubAssembly{


public JoinSubAssembly(Pipe p7,Pipe p8)
{
//Pipe lhs=new Each(new Agg_SubAssembly(p7));
//Pipe rhs=new FunctionSubAssembly(p8);
//Pipe lhs=new Each(p7,new );
//Pipe join=new HashJoin(lhs,new Fields("roll no"),rhs,new Field
s("roll no"));
//setTails(join);
}
}

You might also like