Tackelberz

Tackelberz header image 2

Mapping in Elastic

Februar 25th, 2016 · Keine Kommentare

Lädt man Daten nach Elastic (indizieren) um dann bspw. in Kibana die Daten zu visualisieren, werden die Typen der Variablen des Datensatzes von Elastic per Default bestimmt. Das ist auch in vielen Fällen sehr gut so, doch manchmal kann die Default-Einstellung auch für das gewünschte Ergebnis nachträglich sein. Bspw. werden in Elastic per Default alle Stringvariablen analysiert, das bedeutet, dass die Schlüsselwörter extrahiert werden. In einigen Fällen möchte man das nicht, sondern will mit den Nennungen – wie sie sind – analysieren.
Folgend eine Beschreibung wie ein solches Mapping durchgeführt wird.
Die vorliegende Big Data-Plattform besteht aus Spark (Version 1.4.1) und Elastic (Version 2.1.0)

Um das Mapping zu bewerkstelligen muss ein neuer Index angelegt werden:
curl -XPUT ‘http://iasv0218:9200/k_info_kenn’

checken dieses Indexes
curl -XGET “http://iasv0218:9200/k_info_kenn”

Auch als Information – sollte man jetzt nicht machen – aber, wenn man mal einen Index entfernen möchte:
curl -XDELETE ‘http://iasv0218:9200/k_info_kenn/’

Dann nur für jene Variablen das Mapping bestimmen, die nicht im Standard-Mapping ok für mich sind:
curl -XPUT http://iasv0218:9200/k_info_kenn/kenn/_mappings -d ‘
{
“kenn”: {
“properties”: {
“FALLART”: {
“type”: “string”,
“index”: “not_analyzed”
},
“ABDAT”: {
“type”: “date”,
“format”: “yyyyMM”
}
}
}
}’

-> “kenn” ist hier der spezielle Typ des Mappings. “k_info_kenn” eben der Index.

Nun müssen die Daten (in Elastic werden diese Dokumente genannt) in den vorbereiteten Index eingefügt werden.
Ich beschreibe nun den Weg über Spark-SQL, weil unsere ETL-Tools die Daten gleich in ein Data Frame-Format transformieren.
Natürlich kann man Daten auch direkt in die Spark-Shell laden, dass soll aber ein andermal das Thema sein.
-> Eingabe der folgenden Befehle müssen aber in der Spark-Shell abgegeben werden.

Die Daten aus Spark-SQL wieder in die Spark-Shell laden:
val info = sqlContext.read.parquet(“/data/warehouse/s_db2_info_kenn”)

(Wenn das nicht auf Anhieb geht, dann in Spark-SQL einfach den Datensatz nochmals als Parquet unter anderem Namen speichern)
create table s_db2_info_kenn
using org.apache.spark.sql.parquet as
Select * from s_db2_apl_ikom_ikenn;

Dann Benennung der Feldnamen
val fieldNames = info.schema.fieldNames

Dann als Tabelle die Reihen mappen
val infoTable = info.map(row => row.getValuesMap(fieldNames))

Elastic importieren
import org.elasticsearch.spark._

Dann die Daten (Dokumente) in den vorher gemachten Index laden
infoTable.saveToEs(“k_info_kenn/kenn”)

Und nun kann man auf die herkömmliche Weise den Index in Kibana erstellen und die Daten haben die Form wie man sich es im Index definiert hat.

Tags: Big Data Technologien

0 Antworten bis jetzt ↓

  • Es gibt keine Kommentare bis jetzt...Trete Sachen weg, die vom Formular runterfallen.

Hinterlasse ein Kommentar