Beim Data Engi­nee­ring geht es darum, Daten­pipe­lines zu ent­wer­fen, zu erstel­len und zu pfle­gen, die Roh­da­ten in nütz­li­che Infor­ma­tio­nen für Ana­ly­sen und Ent­schei­dun­gen umwandeln.

Zu die­sem Zweck müs­sen Daten­in­ge­nieure mit ver­schie­de­nen Daten­quel­len, For­ma­ten, Sys­te­men und Tools arbei­ten. Außer­dem müs­sen sie die Qua­li­tät, Zuver­läs­sig­keit und Leis­tung der Daten sicher­stel­len. Data Engi­nee­ring ist jedoch keine leichte Auf­gabe. Eine der größ­ten Her­aus­for­de­run­gen ist der Umgang mit der Hete­ro­ge­ni­tät und Kom­ple­xi­tät der Daten­for­mate und ‑sys­teme.

Daten­in­ge­nieure müs­sen oft benut­zer­de­fi­nier­ten Code schrei­ben oder Biblio­the­ken von Dritt­an­bie­tern ver­wen­den, um Daten über ver­schie­dene Platt­for­men und Spra­chen hin­weg zu lesen, zu schrei­ben, zu bear­bei­ten und zu trans­por­tie­ren. Dies kann zu Over­head, Inef­fi­zi­enz und Feh­lern in der Daten­pipe­line füh­ren. An die­ser Stelle kommt Apa­che Arrow ins Spiel.

Apa­che Arrow ermög­licht Daten­in­ge­nieu­ren die kon­sis­tente und effi­zi­ente Arbeit mit Daten über ver­schie­dene Sys­teme und Spra­chen hin­weg, ohne dass sie sich um Seria­li­sie­rung, Dese­ria­li­sie­rung, Kon­ver­tie­rung oder Kom­pa­ti­bi­li­täts­pro­bleme küm­mern müssen.

Was ist Apa­che Arrow?

Apa­che Arrow ist ein Open-Source-Pro­jekt, das ein sprach­un­ab­hän­gi­ges spal­ten­för­mi­ges Spei­cher­for­mat für fla­che und hier­ar­chi­sche Daten defi­niert, das für effi­zi­ente Ana­ly­se­ope­ra­tio­nen auf moder­ner Hard­ware wie CPUs und GPUs orga­ni­siert ist. Das Arrow-Spei­cher­for­mat unter­stützt auch Zero-Copy-Reads für blitz­schnel­len Daten­zu­griff ohne Serialisierungs-Overhead.

Das Arrow-Pro­jekt ent­hält auch Biblio­the­ken, die das For­mat imple­men­tie­ren und Bau­steine für eine Reihe von Anwen­dungs­fäl­len, ein­schließ­lich Hoch­leis­tungs­ana­ly­sen, bereit­stel­len. Viele popu­läre Pro­jekte ver­wen­den Arrow, um spal­ten­för­mige Daten effi­zi­ent aus­zu­lie­fern oder als Grund­lage für Ana­lyse-Engi­nes. Biblio­the­ken sind für C, C++, C#, Go, Java, Java­Script, Julia, MATLAB, Python, R, Ruby und Rust verfügbar.

Warum Apa­che Arrow?

Apa­che Arrow hat meh­rere Vor­teile für Data-Engineering-Anwendungen:

  • Leis­tung: Apa­che Arrow nutzt die Vor­teile der spal­ten­för­mi­gen Daten­dar­stel­lung, wie bes­sere Kom­pri­mie­rung, schnel­le­res Scan­nen, vek­to­ri­sierte Ope­ra­tio­nen und Cache-Effi­zi­enz. Es ermög­licht auch SIMD-Opti­mie­run­gen (Sin­gle Ins­truc­tion, Mul­ti­ple Data) mit moder­nen Pro­zes­so­ren. Außer­dem ent­fällt die kost­spie­lige Seria­li­sie­rung und Dese­ria­li­sie­rung bei der Über­tra­gung von Daten zwi­schen Sys­te­men oder Sprachen.
  • Inter­ope­ra­bi­li­tät: Es bie­tet ein gemein­sa­mes Daten­for­mat, das von ver­schie­de­nen Sys­te­men und Spra­chen gemein­sam genutzt wer­den kann, ohne dass Infor­ma­tio­nen oder Funk­tio­nen ver­lo­ren gehen. Außer­dem erleich­tert es die Wie­der­ver­wen­dung von Biblio­the­ken und Algo­rith­men, die mit Arrow-Daten arbei­ten, auch über Sprach­gren­zen hinweg.
  • Stan­dar­di­sie­rung: Apa­che Arrow bie­tet eine stan­dar­di­sierte, sprach­un­ab­hän­gige Spe­zi­fi­ka­tion für die Dar­stel­lung struk­tu­rier­ter, tabel­len­ar­ti­ger Daten­sätze im Spei­cher. Dies ver­ein­facht die Ent­wick­lung und War­tung von Data-Engi­nee­ring-Anwen­dun­gen, die mit ver­schie­de­nen Daten­quel­len und ‑for­ma­ten arbei­ten müssen.
  • Fle­xi­bel: Apa­che Arrow unter­stützt ein umfang­rei­ches Daten­typ­sys­tem (ein­schließ­lich ver­schach­tel­ter und benut­zer­de­fi­nier­ter Daten­ty­pen), das auf die Anfor­de­run­gen von ana­ly­ti­schen Daten­bank­sys­te­men, Daten­rah­men­bi­blio­the­ken und ande­ren Anwen­dun­gen zuge­schnit­ten ist. Außer­dem kön­nen Benut­zer benut­zer­de­fi­nierte Meta­da­ten und Erwei­te­run­gen des For­mats definieren.

Wie benutzt man Apa­che Arrow?

Es kann je nach Anwen­dungs­fall und gewähl­ter Spra­che auf unter­schied­li­che Weise ein­ge­setzt wer­den. Hier sind einige Bei­spiele für die Ver­wen­dung von Apa­che Arrow in Python:

  • Lesen und Schrei­ben von Arrow-Dateien: Sie kön­nen die pyar­row Biblio­thek ver­wen­den, um Pfeil­da­teien (mit den Erwei­te­run­gen .arrow oder .fea­ther) von der Fest­platte oder aus dem Spei­cher zu lesen und zu schrei­ben. Zum Beispiel:
import pyarrow as pa
import pyarrow.feather as feather

# Create a table from a list of dictionaries
data = [
    {"name": "Alice", "age": 25, "gender": "F"},
    {"name": "Bob", "age": 30, "gender": "M"},
    {"name": "Charlie", "age": 35, "gender": "M"}
]
table = pa.Table.from_pydict(data)

# Write the table to an Arrow file
feather.write_feather(table, "data.arrow")

# Read the table from an Arrow file
table = feather.read_table("data.arrow")
  • Kon­ver­tie­rung zwi­schen Arrow und Pan­das: Sie kön­nen die pyar­row-Biblio­thek ver­wen­den, um zwi­schen Arrow-Tabel­len und Pan­das-Daten­rah­men zu kon­ver­tie­ren. Zum Beispiel:
import pyarrow as pa
import pandas as pd

# Create a Pandas data frame
df = pd.DataFrame(data)

# Convert the data frame to an Arrow table
table = pa.Table.from_pandas(df)

# Convert the table back to a Pandas data frame
df = table.to_pandas()
  • Ver­wen­dung von Arrow mit Spark: Sie kön­nen die pyar­row-Biblio­thek ver­wen­den, um die Arrow-Opti­mie­rung bei der Arbeit mit Spark Data­Frames in Python zu akti­vie­ren. Zum Beispiel:
import pyarrow as pa
import pyspark.sql.functions as F

# Enable Arrow optimization
spark.conf.set("spark.sql.execution.arrow.pyspark.enabled", "true")

# Create a Spark DataFrame from a Pandas data frame
df = spark.createDataFrame(pd.DataFrame(data))

# Apply a Spark UDF that uses Arrow data
@F.pandas_udf("int", F.PandasUDFType.SCALAR)
def add_one(s: pd.Series) -> pd.Series:
    return s + 1

df = df.withColumn("age_plus_one", add_one(df.age))

Fazit

Apa­che Arrow ist eine leis­tungs­starke und viel­sei­tige Platt­form für Data-Engi­nee­ring-Anwen­dun­gen, die schnell, inter­ope­ra­bel und stan­dar­di­siert mit spal­ten­för­mi­gen Daten arbei­ten müs­sen. Es kann Daten­in­ge­nieu­ren hel­fen, die Leis­tung, Inter­ope­ra­bi­li­tät, Stan­dar­di­sie­rung und Fle­xi­bi­li­tät ihrer Daten­pipe­lines zu ver­bes­sern und das bestehende Öko­sys­tem von Arrow-kom­pa­ti­blen Pro­jek­ten und Biblio­the­ken zu nut­zen. Wenn Sie mehr dar­über erfah­ren möch­ten, kön­nen Sie die offi­zi­elle Web­site besu­chen oder die Doku­men­ta­tion lesen.

Quelle: medium.com

Lesen Sie hier mehr über Lösun­gen im Bereich Data Engi­nee­ring oder besu­chen Sie eines unse­rer kos­ten­lo­sen Web­i­nare.