Lets sehen, was wir haben. Erste Datei [Schnittstelle Klasse]:Wie zwei Dateien über Cascading verbinden
list arrayList
list linkedList
Zweite Datei [Klasse countOfInstanse]:
arrayList 120
linkedList 4
Ich möchte diese beiden Dateien mit Schlüssel [Klasse] verbinden und für jede Schnittstelle zählen erhalten:
list 124
und Code:
public class Main
{
public static void main(String[] args)
{
String docPath = args[ 0 ];
String wcPath = args[ 1 ];
String stopPath = args[ 2 ];
Properties properties = new Properties();
AppProps.setApplicationJarClass(properties, Main.class);
AppProps.setApplicationName(properties, "Part 1");
AppProps.addApplicationTag(properties, "lets:do:it");
AppProps.addApplicationTag(properties, "technology:Cascading");
FlowConnector flowConnector = new Hadoop2MR1FlowConnector(properties);
// create source and sink taps
Tap docTap = new Hfs(new TextDelimited(true, "\t"), docPath);
Tap wcTap = new Hfs(new TextDelimited(true, "\t"), wcPath);
Fields stop = new Fields("class");
Tap classTap = new Hfs(new TextDelimited(true, "\t"), stopPath);
// specify a regex operation to split the "document" text lines into a token stream
Fields token = new Fields("token");
Fields text = new Fields("interface");
RegexSplitGenerator splitter = new RegexSplitGenerator(token, "[ \\[\\]\\(\\),.]");
Fields fieldSelector = new Fields("interface", "class");
Pipe docPipe = new Each("token", text, splitter, fieldSelector);
// define "ScrubFunction" to clean up the token stream
Fields scrubArguments = new Fields("interface", "class");
docPipe = new Each(docPipe, scrubArguments, new ScrubFunction(scrubArguments), Fields.RESULTS);
Fields text1 = new Fields("amount");
// RegexSplitGenerator splitter = new RegexSplitGenerator(token, "[ \\[\\]\\(\\),.]");
Fields fieldSelector1 = new Fields("class", "amount");
Pipe stopPipe = new Each("token1", text1, splitter, fieldSelector1);
Pipe tokenPipe = new CoGroup(docPipe, token, stopPipe, text, new InnerJoin());
tokenPipe = new Each(tokenPipe, text, new RegexFilter("^$"));
// determine the word counts
Pipe wcPipe = new Pipe("wc", tokenPipe);
wcPipe = new Retain(wcPipe, token);
wcPipe = new GroupBy(wcPipe, token);
wcPipe = new Every(wcPipe, Fields.ALL, new Count(), Fields.ALL);
// connect the taps, pipes, etc., into a flow
FlowDef flowDef = FlowDef.flowDef().setName("wc").addSource(docPipe, docTap).addSource(stopPipe, classTap).addTailSink(wcPipe, wcTap);
// write a DOT file and run the flow
Flow wcFlow = flowConnector.connect(flowDef);
wcFlow.writeDOT("dot/wc.dot");
wcFlow.complete();
}
}
Danke in advanse
[entschied ich mich dieses Problem Schritt-für-Schritt und links Endergebnis für andere hier zu lösen. Also erster Schritt - Couldn`t join two files with one key via Cascading (noch nicht abgeschlossen)]
Sie müssen Ihren Code teilen, um eine sinnvolle Hilfe zu erhalten – moxn
Bitte säubern Sie zuerst Ihren Code. Sie können nicht einfach alles in die Hauptmethode einfügen. Bitte teilen Sie den Code auf und schreiben Sie einen Methoden-Stub für die Aufgabe, die Sie erreichen möchten. –
Ich sehe keine CoGroup, die zwei oben erwähnte Dateien in den von Ihnen geposteten Code einfügt. – Amit