Einführung in Koalas und Databricks

Zbigniew Pomianowski
Zbigniew Pomianowski
May 21, 2025
7 min read
Loading the Elevenlabs Text to Speech AudioNative Player...

[VC_Zeile] [VC_Spalte] [VC_Spalte_Text]

Das Wichtigste zuerst

In der Welt der Datenwissenschaften und Python gibt es ein sehr bekanntes Paket Pandas.

Aber... was sind Pandas?

Pandas bieten wichtige Datenstrukturen wie Reihen, Datenrahmen und Panels, die bei der Manipulation von Datensätzen und Zeitreihen helfen. Die Einführung einer Vielzahl von Operationen macht diese Bibliothek zu einem sehr leistungsstarken Tool. Sie kann kostenlos verwendet werden und ist eine Open-Source-Bibliothek, was sie zu einer der am häufigsten verwendeten Data-Science-Bibliotheken der Welt macht. Finden Sie heraus, wie unsere datentechnische Dienstleistungen kann Ihrem Unternehmen helfen

 

Die Architektur der Pandas

 

  • Pandas/Kern - Datenstrukturen
  • Pandas/src - grundlegende Funktionen sind eingeschrieben C/Zython.
  • Pandas/io - Tools zur Eingabe und Ausgabe von Dateien, Daten usw.
  • Pandas/Werkzeuge - Codes und Algorithmen für verschiedene Funktionen und Operationen (z. B.: Merge, Join, Verkettung usw.)
  • Pandas/spärlich - enthält die spärlichen Versionen, z. B. die Versionen, die für die Behandlung fehlender Werte verschiedener Datenstrukturen erstellt wurden
  • Pandas/Statistiken - Funktionen im Zusammenhang mit Statistiken, wie lineare Regression
  • Pandas/Util - Testwerkzeuge und verschiedene andere Hilfsprogramme zum Debuggen der Bibliothek.
  • Panda/Spy - Schnittstelle, die beim Herstellen einer Verbindung hilft R. Es heißt R2Py

 

Die wichtigsten Funktionen

 

  • Datenmanipulation
  • Umgang mit fehlenden Werten
  • Unterstützung von Dateiformaten
  • Datenbereinigung
  • visualisieren
  • Python-Unterstützung

 

 

Einfache Codebeispiele

 

Excel-Dateien schreiben - Testmuster generieren

 

numpy importieren
zufällig importieren
importiere Pandas als PDF

writer = pd.ExcelWriter ('pandas_simple.xlsx', engine = 'openpyxl')

beispiel_nb = int (1e1)
df = pd.DataFrame (
{'Seite': np.random.random_integers (0, 100, sample_nb),
'Geschlecht': np.random.choice (['männlich', 'weiblich'], sample_nb)})

df.to_excel (writer, blattname='blatt1')

writer.save ()

 

Excel-Dateien lesen

 

importiere Pandas als PDF
df = pd.read_excel ('pandas_simple.xlsx', blattname='Blatt1')

df

Ergebnis:

 

Unbenannt: 0 Jahre, Geschlecht
0 0 43 weiblich
1 1 57 männlich
2 2 9 weiblich
3 3 56 weiblich
4 4 75 männlich
5 5 6 weiblich
6 6 49 männlich
7 7 15 männlich
8 8 19 weiblich
9 9 63 männlich

 

df.sex.unique ()

Ergebnis:

 

array (['weiblich', 'männlich'], dtype=Objekt)

 

df.mean ()

Ergebnis:

 

Unbenannt: 0 4.5
Seite 39,2
dtype: float64

 

 

Koalas

Hauptabsicht davon Projekt besteht darin, Datenwissenschaftlern, die Pandas verwenden, eine Möglichkeit zu bieten, ihre bestehenden Big-Data-Workloads zu skalieren, indem sie sie auf Apache SparkTM ausführen, ohne ihren Code wesentlich zu ändern.
Das Koalas Projekt ermöglicht die Verwendung Pandas API Schnittstelle zu Big Data, indem die Pandas implementiert werden DataFrame-API oben auf Apache Spark.
Pandas ist die De-facto-Standard-DataFrame-Implementierung (Einzelknoten) in Python, während Spark der Standard für die Verarbeitung großer Datenmengen ist.
Das bedeutet, dass POC-Arbeiten, die in Pandas geschrieben wurden, theoretisch sehr einfach in die Spark-Umgebung migriert werden können sollten.
Wenn Sie bereits mit Pandas vertraut sind, können Sie mit Spark sofort produktiv sein, ganz ohne Lernaufwand.

 

  • Pandas - Tests, kleinere Datensätze
  • Koalas - große verteilte Datensätze

Warnung: Koalas implementiert ~ 80% aller Pandas-APIs [Juni 2020]

Koalas wird empfohlen, mit der neuesten Version von Apache Spark 3.0+ zu verwenden:

 

  • Python 3.8
  • Spark-Zubehör
  • neue Typhinweise
  • besserer Betrieb vor Ort

Intern basieren Koalas DataFrames auf der PySpark DataFrame-API. Koalas übersetzt Pandas-APIs in den logischen Plan von Spark SQL, der anschließend optimiert und von der ausgeklügelten und robusten Spark-SQL-Engine ausgeführt wird. Koalas verwendet auch eine verzögerte Bewertungssemantik, um die Leistung zu maximieren. Um eine konforme Pandas-DataFrame-Struktur und ihre umfangreichen APIs zu haben, die eine implizite Reihenfolge erfordern, verfügen Koalas DataFrames über die internen Metadaten, um Pandas-äquivalente Indizes und Spaltenbeschriftungen darzustellen, die den Spalten in PySpark DataFrame zugeordnet sind.

 

 

Lass uns mit Databricks spielen

Um die Sache noch schwieriger zu machen, werden wir Excel-Dateien verwenden:) Jemand hat einmal gesagt, dass echte Big Data irgendwann immer Excel beinhaltet. Das Beste wäre, es ganz am Ende des Workflows zu haben, aber das Leben verifiziert es leicht.

Koalas ist eine High-Level-Bibliothek, wir können sie nur auf der Treiberseite installieren. Nichtsdestotrotz müssen wir immer noch Abhängigkeiten auf unseren Knoten installiert haben:

 

  • PySpark >= 2.4 - Treiber + Knoten
  • Schafgarbe >= 0.10 - Treiber + Knoten
  • Pandas >= 0.23 - Fahrer
  • Matplotlib >= 3.0.0 - Fahrer

Installation und Importe:

 

dbutils.library.installPypi („Koalas“)
dbutils.library.installPypi („openpyxl“)
dbutils.library.restartPython ()

importiere numpy als np
importiere Pandas als PDF
importiere databricks.koalas als ks

Jetzt generieren wir einige Beispieldaten, die als ziemlich schwer angesehen werden und auf einer einzigen Maschine verarbeitet werden müssen. Dies ist eine sehr ungewöhnliche Quelle, daher nutzt der Code keine Hebelwirkung Die von Spark Rahmenleistung:

 

numpy importieren
zufällig importieren
importiere Pandas als PDF

def sample_dfs (files_nb):
für i im Bereich (files_nb):
beispiel_nb = int (1e5)
ergibt ks.DataFrame (
{'Seite': np.random.randint (0, 100, Beispiel_nb),
'Geschlecht': np.random.choice (['männlich', 'weiblich'], sample_nb)})

für idx, df in enumerate (sample_dfs (100)):
writer = pd.ExcelWriter ('/dbfs/pandas_simple_%03d.xlsx'% idx, engine='openpyxl')
df.to_excel (writer, blattname='blatt1')
writer.save ()

Solch eine unangenehme Quelle kann sofort geladen werden!

 

kdf = ks.read_excel ('Datei: /dbfs/pandas_simple_*', engine='openpyxl')
kdf.to_spark () .count ()

Ergebnis:

 

10000000

 

kdf.count ()

Ergebnis:

 

Unbenannt: 0 10000
Alter 10000
Sex 10000
dtype: int64

Um zu beweisen, dass Koalas es nutzen Funke wir können verwenden:

 

kdf.explain (erweitert=Wahr)

Ergebnis:

 

== Analysierter logischer Plan ==
Projekt [__index_level_0__ #32185L, Unbenannt: 0 #32186L, Seite #32187L, Geschlecht #32188]
+- Projekt [__index_level_0__ #32185L, Unbenannt: 0 #32186L, Alter #32187L, Geschlecht #32188, monotonically_increasing_id () AS __natural_order__ #32197L]
+- MapinPandas <lambda>(Inhalt #32178), [__index_level_0__ #32185L, Unbenannt: 0 #32186L, Alter #32187L, Geschlecht #32188]
+- Projekt [Inhalt #32178]
+- Relation [Pfad #32175, Änderungszeit #32176, Länge #32177L, Inhalt #32178] Binärdatei

== Analysierter logischer Plan ==
__index_level_0__: bigint, unbenannt: 0: bigint, Alter: bigint, Geschlecht: string
Projekt [__index_level_0__ #32185L, Unbenannt: 0 #32186L, Seite #32187L, Geschlecht #32188]
+- Projekt [__index_level_0__ #32185L, Unbenannt: 0 #32186L, Alter #32187L, Geschlecht #32188, monotonically_increasing_id () AS __natural_order__ #32197L]
+- MapinPandas <lambda>(Inhalt #32178), [__index_level_0__ #32185L, Unbenannt: 0 #32186L, Alter #32187L, Geschlecht #32188]
+- Projekt [Inhalt #32178]
+- Relation [Pfad #32175, Änderungszeit #32176, Länge #32177L, Inhalt #32178] Binärdatei

== Optimierter logischer Plan ==
MapinPandas <lambda>(Inhalt #32178), [__index_level_0__ #32185L, Unbenannt: 0 #32186L, Seite #32187L, Geschlecht #32188]
+- Projekt [Inhalt #32178]
+- Relation [Pfad #32175, Änderungszeit #32176, Länge #32177L, Inhalt #32178] Binärdatei

== Physikalischer Plan ==
MapinPandas <lambda>(Inhalt #32178), [__index_level_0__ #32185L, Unbenannt: 0 #32186L, Seite #32187L, Geschlecht #32188]
+- FileScan-Binärdatei [content #32178] Stapelweise: false, DataFilters: [], Format: org.apache.spark.sql.execution.dataSources.BinaryFile.BinaryFileFormat @128c5b73, Speicherort: InMemoryFileIndex [Datei: /dbfs/pandas_simple_003.xlsx, Datei: /dbfs/pandas_simple_009.xlsx, Datei: /dbf..., PartitionFilters: [], pushedFilters: [], readSchema: struct <content:binary>

Bei der Besichtigung DAG Für diesen Datenrahmen können wir in der ersten Phase neue Arten von Operationen beobachten:

FileScan Binärdatei -> Karte in Pandas

 

Konfiguration

Koalas verfügt über eine Reihe von Konfigurationsoptionen, mit denen sogar der Verarbeitungstyp je nach Schwellenwert zwischen Pandas und PySpark umgeschaltet werden kann. Bitte beachten Sie die Dokumente hier. Bestimmte Optionen können einen großen Einfluss auf die endgültige Verarbeitungszeit haben.

Optionen können global oder für einen Teil des Codes mithilfe von Kontextmanagern festgelegt werden:

 

importiere databricks.koalas als ks
aus databricks.koalas.config importiere get_option, set_option, reset_option

# Beispiel
opt_value = get_option ('compute.max_rows')
print ('check', opt_value)
set_option ('compute.max_rows', 2000)
opt_value = get_option ('compute.max_rows')
print ('nach der Änderung', opt_value)
reset_option ('compute.max_rows')
print ('nach dem Reset', opt_value)

# oder
ks.options.compute.max_rows = 2000
drucken (ks.options.compute.max_rows)

# Koalas-Optionen werden nur im folgenden Kontext verwendet
mit ks.option_context ('display.max_rows', 10, 'compute.max_rows', 5):
drucken (ks.get_option ('display.max_rows'))
drucken (ks.get_option ('compute.max_rows'))

 

Interoperabilität zwischen Pandas und Spark

Es gibt mehrere Möglichkeiten, die Spark-Funktionalität auf dem Koalas-Datenrahmen zu verwenden:

 

importiere databricks.koalas als ks

sdf = spark.createDataFrame (
[(1, 23, 'Marysia'),
(2, 15, „Kasia“),
(3, 17, 'Wojtek')],
schema= ['Index', 'Alter', 'Name'])
sdf.show ()

# +-----+---+-------+
# |index|Alter| Name|
# +-----+---+-------+
# | 1| 23|Marysia|
# | 2| 15| Kasia|
# | 3| 17| Wojtek|
# +-----+---+-------+

# konvertiere spark-df in koalas-df
kdf = sdf.to_koalas ()

# koalas-df in spark-df umwandeln
sdf = kdf.to_spark ()

# Spark-Zubehör
aus pyspark.sql importiere Funktionen als F
kdf ['age_sqrt'] = kdf.age.spark.transform (Lambda-Spalte: f.sqrt (col))

kdf

# Index-Seitenname age_sqrt
# 0 1 23 Marysia 4.795832
# 1 2 15 Kasia 3,872983
# 2 3 17 Wojtek 4.123106

# bewerben
kdf.spark.apply (
lambda sdf: sdf.selectExpr ('Seite + 10 als Alter_next_10_years))

# Alter_nächste_10_Jahre
Nr. 0 33
Nr. 1 25
Nr. 2 27

Beachten Sie, dass sich bewerben from spark accessor wird verwendet, um den gesamten Datenrahmen innerhalb der Lambda-Funktion zu verarbeiten. transformieren wird nur für eine bestimmte Spalte verwendet.

 

Kommentar

Koalas ist etwas noch Neues. Nichtsdestotrotz kann es eine sehr nützliche Bibliothek sein, insbesondere wenn ein funktionierendes POC-Projekt, das auf Pandas basiert, eine schnelle Migration in eine vollständige Big-Data-Umgebung wie Spark erfordert, um einen viel größeren Maßstab nutzen zu können.

Besuchen Sie unseren Blog für ausführlichere Data Engineering-Artikel:

[/vc_column_text] [/vc_column] [/vc_row] [vc_row] [vc_column] [vc_single_image image="6559" img_size="full“ onclick="custom_link“ link= „https://dsstream.com/services/data-engineering/"][/vc_column][/vc_row]

Share this post
Data Engineering
Zbigniew Pomianowski
MORE POSTS BY THIS AUTHOR
Zbigniew Pomianowski

Curious how we can support your business?

TALK TO US