[JAVA] Zählen Sie die Häufigkeit des Auftretens von Wörtern in einem Satz durch Stream-Verarbeitung (Apache Apex).

Aus Zählen der Häufigkeit des Auftretens von Wörtern in Sätzen durch Stream-Verarbeitung \ (Apache Apex ) \ -Bad-Satzmuster

Frühere Geschichte

Webinar: Building Your First Apache Apex Application - YouTube

Dinge notwendig

Umgebung

OS

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.1 LTS"

Java

$ java -version
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-8u131-b11-0ubuntu1.16.04.2-b11)
OpenJDK 64-Bit Server VM (build 25.131-b11, mixed mode)
$ javac -version
javac 1.8.0_131

git

$ git version
git version 2.7.4

Maven

$ mvn --version
Apache Maven 3.3.9
Maven home: /usr/share/maven
Java version: 1.8.0_131, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-8-openjdk-amd64/jre
Default locale: en_US, platform encoding: ISO-8859-1
OS name: "linux", version: "4.4.0-57-generic", arch: "amd64", family: "unix"

Hadoop

$ hadoop version
Hadoop 2.8.0
Subversion https://git-wip-us.apache.org/repos/asf/hadoop.git -r 91f2b7a13d1e97be65db92ddabc627cc29ac0009
Compiled by jdu on 2017-03-17T04:12Z
Compiled with protoc 2.5.0
From source with checksum 60125541c2b3e266cbf3becc5bda666
This command was run using /usr/local/hadoop/share/hadoop/common/hadoop-common-2.8.0.jar

git clone

Klonen Sie zunächst das erforderliche Repository. Es gibt drei zu verwenden: "Apex-Core", "Apex-Malhar" und "DataTorrent / Beispiele". Erstellen Sie ein Apex-Verzeichnis in Ihrem Zuhause und arbeiten Sie dort.

~


$ mkdir apex
$ cd apex

~/apex


$ git clone [email protected]:apache/apex-core.git
$ git clone [email protected]:apache/apex-malhar.git
$ git clone [email protected]:DataTorrent/examples.git

Apex-Installation

Erstellen und installieren Sie "Apex-Core" und "Apex-Malhar" auf Maven. Überspringen Sie laufende Tests mit -DskipTests und es wird (etwas) schneller abgeschlossen. Es braucht Zeit, also warten Sie eine Weile: Kaffee:

~/apex


$ ls              
apex-core   apex-malhar examples
$ cd apex-core

~/apex/apex-core


$ mvn clean install -DskipTests

~/apex


$ cd apex-malhar

~/apex/apex-malhar


$ mvn clean install -DskipTests

Praktisches Werkzeug

Halten Sie die Tools bereit, während Sie auf den Abschluss des Builds warten. Es gibt ein Skript namens "Aliase" in "DataTorrent / examples". Laden Sie es also und stellen Sie es zur Verfügung.

~/apex


$ source examples/tutorials/topnwords/scripts/aliases

Der Inhalt von "Aliasen" ist wie folgt.

~/apex/examples/tutorials/topnwords/scripts/aliases


# bash aliases and functions useful for working on input and out directories
#

# input and output directories
in=/tmp/test/input-dir out=/tmp/test/output-dir

# list files in input directory
alias ls-input="hdfs dfs -ls $in"

# list files in output directory
alias ls-output="hdfs dfs -ls $out"

# clean input directory
alias clean-input="hdfs dfs -rm $in/*"

# clean output directory
alias clean-output="hdfs dfs -rm $out/*"

# convenient alias to run dtcli from code repository
alias dtcli3="$HOME/src/incubator-apex-core/engine/src/main/scripts/dtcli"

# copy local file (argument) to input directory
function put-file ( ) {
    hdfs dfs -put "$1" "$in"
}

# make local copy of output file (argument) from output directory
function get-file ( ) {
    hdfs dfs -get "$out/$1" "$1".out
}

Machen Sie es einfach zu kopieren und rufen Sie "newapp" zu "~ / apex" auf.

~/apex


$ cp examples/tutorials/topnwords/scripts/newapp .

Es ist nur ein "mvn" -Befehl, und Sie können "myapexapp" nach Bedarf neu schreiben.

~/apex/examples/tutorials/topnwords/scripts/newapp



#!/bin/bash
# script to create a new project
 
# change project name and archetype version as needed
name=myapexapp
version=3.3.0-incubating

mvn -B archetype:generate \
  -DarchetypeGroupId=org.apache.apex \
  -DarchetypeArtifactId=apex-app-archetype \
  -DarchetypeVersion=$version  \
  -DgroupId=com.example \
  -Dpackage=com.example.$name \
  -DartifactId=$name \
  -Dversion=1.0-SNAPSHOT

Projekterstellung

Führen Sie newapp aus, um ein Projekt zu erstellen. Wenn Y :: erscheint, geben Sie dort ein (Turn!).

~/apex


$ bash newapp
[INFO] Scanning for projects...
[INFO] 
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO] 
...
$ ls
apex-core   apex-malhar examples myapexapp newapp
$ cd myapexapp

Überprüfen Sie nach dem Erstellen des Projekts den Quellcode.

~/apex/myapexapp


$ find src -name "*.java"
src/main/java/com/example/myapexapp/Application.java
src/main/java/com/example/myapexapp/RandomNumberGenerator.java
src/test/java/com/example/myapexapp/ApplicationTest.java

Diesmal brauche ich keinen Unit-Test, also lasse ich ihn. Auf diese Weise werden die Tests nicht ausgeführt, wenn Sie beim Erstellen -DskipTests vergessen. Dieses Mal habe ich es in / tmp gespeichert, aber Sie können es natürlich löschen.

~/apex/myapexapp


$ mv src/test/java/com/example/myapexapp/ApplicationTest.java /tmp

Beispielcode eingeführt

Führen Sie den Code für "DataTorrent / examples" ein. Wechseln Sie zunächst in das Quellverzeichnis.

~/apex/myapexapp


$ cd src/main/java/com/example/myapexapp

Bringen Sie den Quellcode für "Tutorial / Topnwords" ein. Gibt die Häufigkeit des Auftretens jedes Wortes im Eingabesatz aus. Details werden weggelassen.

$ ls   
Application.java           RandomNumberGenerator.java
$ ls ~/apex/examples/tutorials/topnwords/webinar/
ApplicationWordCount.java      WCPair.java                    WordReader.java
FileWordCount.java             WindowWordCount.java           properties-SortedWordCount.xml
LineReader.java                WordCountWriter.java
$ cp ~/apex/examples/tutorials/topnwords/webinar/*.java .
$ ls
Application.java           LineReader.java            WindowWordCount.java
ApplicationWordCount.java  RandomNumberGenerator.java WordCountWriter.java
FileWordCount.java         WCPair.java                WordReader.java

Wir brauchen auch eine Eigenschaftendatei, also kopieren Sie diese auch in "Ressourcen".

$ cd ../../../../resources/META-INF 
$ cp ~/apex/examples/tutorials/topnwords/webinar/properties-SortedWordCount.xml .
$ ls
properties-SortedWordCount.xml properties.xml

Anwendung erstellen

Wechseln Sie in das oberste Verzeichnis der Anwendung und erstellen Sie. Nach dem Erstellen wird "myapexapp-1.0-SNAPSHOT.apa" im "Ziel" -Verzeichnis erstellt.

$ cd ~/apex/myapexapp

~/apex/myapexapp


$ mvn clean package -DskipTests
$ ls target 
antrun                     generated-resources        maven-archiver             site
archive-tmp                generated-sources          maven-status               test-classes
classes                    generated-test-sources     myapexapp-1.0-SNAPSHOT.apa
deps                       javadoc-bundle-options     myapexapp-1.0-SNAPSHOT.jar

Führen Sie die Anwendung aus

Verwenden Sie die Apex CLI-Tools (https://apex.apache.org/docs/apex/apex_cli/#apex-cli-commands), um die erstellte Anwendung auszuführen. Es befindet sich unter "Apex-Core", also führen Sie es im "myapexapp" -Verzeichnis aus.

~/apex/myapexapp


$ ../apex-core/engine/src/main/scripts/apex 
Apex CLI 3.7.0-SNAPSHOT 02.06.2017 @ 09:02:30 JST rev: 22feeed branch: master
apex> 

Geben Sie dann launch target / myapexapp-1.0-SNAPSHOT.apa ein, um es auszuführen. Sie werden gefragt, ob Sie "MyFirstApplication" oder "SortedWordCount" ausführen möchten. Wenn Sie also 2 auswählen, wird die Anwendung ausgeführt und "appId" ausgegeben.

apex> launch target/myapexapp-1.0-SNAPSHOT.apa
  1. MyFirstApplication
  2. SortedWordCount
Choose application: 2
{"appId": "application_1496704660177_0001"}
apex (application_1496704660177_0001) > 

Funktionsprüfung

Erstellen Sie zunächst ein Eingabe- / Ausgabeverzeichnis mit "hdfs dfs".

$ hdfs dfs -mkdir -p /tmp/test/input-dir
$ hdfs dfs -mkdir -p /tmp/test/output-dir

Derzeit gibt es noch nichts.

$ ls-input
...Es wird nichts angezeigt
$ ls-output
...Es wird nichts angezeigt

Legen Sie eine Textdatei mit "put-file", definiert durch "Aliase", in das Eingabeverzeichnis. Dieses Mal habe ich einen englischen Satz unter https://www.dummytextgenerator.com erstellt und als dummy.txt gespeichert.

$ ls -lh ~/*.txt
/home/user/dummy.txt
$ put-file ~/dummy.txt

Wenn Sie "ls-input" ausführen, finden Sie dieselbe Textdatei wie zuvor.

$ ls-input
Found 1 items
-rw-r--r--   1 vagrant supergroup      15167 2017-06-06 04:34 /tmp/test/input-dir/dummy.txt

Wenn Sie "ls-output" ausführen, wird die Ausgabedatei erstellt. Überprüfen Sie daher den Inhalt.

$ ls-output
Found 1 items
-rwxrwxrwx   1 vagrant supergroup       3028 2017-06-06 04:34 /tmp/test/output-dir/dummy.txt
$ hdfs dfs -cat /tmp/test/output-dir/dummy.txt | head
t : 75
you : 43
re : 29
sixth : 22
seasons : 22
creature : 22
every : 22
moved : 20
together : 20
subdue : 20

Die Häufigkeit des Auftretens von Wörtern wurde korrekt ausgegeben!

Recommended Posts

Zählen Sie die Häufigkeit des Auftretens von Wörtern in einem Satz durch Stream-Verarbeitung (Apache Apex).
Zählen der Häufigkeit des Auftretens von Wörtern in Sätzen durch Stream-Verarbeitung (Apache Apex) Teil 2 Codierung
Ein Programm, das die Anzahl der Wörter in einer Liste zählt
Reihenfolge der Verarbeitung im Programm
Benennen und rufen Sie in Ruby übergeordnete Klassenmethoden explizit auf
Herbst 2017 Sicherheitsspezialist Ich habe die Häufigkeit der Wörter überprüft, die am Morgen 2 erschienen sind
Messen Sie die Größe eines Ordners mit Java
[Java] Ganzzahlige Informationen von Zeichen in der Textdatei, die mit der Methode read () erfasst wurden
Schreiben Sie einen Test, indem Sie die Geschichte von Mr. Nabeats in der Welt mit Rubin umsetzen
Eine Überprüfung des von Rails-Anfängern verwendeten Codes
Format der Protokollausgabe von Tomcat selbst in Tomcat 8
Über das Problem des Deadlocks bei der Parallelverarbeitung in gem'sprockets '4.0
Bildverarbeitung: Grundstruktur des vom Programm gelesenen Bildes
Informationen zum Hinzufügen von Variablen in der iterativen Verarbeitung in der while-Anweisung
Verzweigungsverarbeitung mit dem Rückgabewert von RestTemplate und dem Statuscode von ResponseEntity in Spring Boot