{"id":69038,"date":"2026-10-23T11:21:28","date_gmt":"2026-10-23T09:21:28","guid":{"rendered":"https:\/\/www.inovex.de\/?p=69038"},"modified":"2026-10-23T11:21:28","modified_gmt":"2026-10-23T09:21:28","slug":"lokales-pyspark-testing-mit-databricks-connect-devcontainers","status":"publish","type":"post","link":"https:\/\/www.inovex.de\/de\/blog\/lokales-pyspark-testing-mit-databricks-connect-devcontainers\/","title":{"rendered":"Lokales PySpark Testing mit Databricks Connect &#038; Devcontainers"},"content":{"rendered":"<div>\n<p>Tests sind ein Eckpfeiler jeder produktionsreifen Anwendung und erh\u00f6hen die Zuverl\u00e4ssigkeit sowohl bei der lokalen Entwicklung als auch in den Pipelines. Doch die Umstellung auf Cloud-native \u00d6kosysteme wie Databricks kann zu unerwarteten Schwierigkeiten f\u00fchren. Eine solche Schwierigkeit haben wir bei der Verwendung der Databricks-eigenen Client-Bibliothek \u201e<a href=\"https:\/\/docs.databricks.com\/aws\/en\/dev-tools\/databricks-connect\/\">Databricks Connect<\/a>\u201c festgestellt.<\/p>\n<p>Warum? Die Integration der Bibliothek kann lokale Test-Workflows unterbrechen.<\/p>\n<p>Bei der Real I.S. AG entwickeln wir eine Datenintegrationsplattform auf Basis von Databricks. Als Teil unseres Toolkits nutzen wir Databricks Connect. Wir haben jedoch festgestellt, dass dieses spezielle Paket eine besondere Handhabung bei der Ausf\u00fchrung von Tests erfordert.<\/p>\n<p>Dieser Beitrag beleuchtet die technischen Feinheiten dieses Fehlers, bietet einen detaillierten Einblick in die Funktionsweise von Databricks Connect und skizziert unsere L\u00f6sung zur Aufrechterhaltung einer nahtlosen, funktionsf\u00e4higen Testumgebung.<\/p>\n<p><!--more--><\/p>\n<\/div>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_88 counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\"><p class=\"ez-toc-title\" style=\"cursor:inherit\"><\/p>\n<\/div><nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.inovex.de\/de\/blog\/lokales-pyspark-testing-mit-databricks-connect-devcontainers\/#Databricks-Connect-als-Bindeglied-zwischen-Ihnen-und-Databricks\" >Databricks Connect als Bindeglied zwischen Ihnen und Databricks<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.inovex.de\/de\/blog\/lokales-pyspark-testing-mit-databricks-connect-devcontainers\/#Devcontainers-als-Loesung\" >Devcontainers als L\u00f6sung<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.inovex.de\/de\/blog\/lokales-pyspark-testing-mit-databricks-connect-devcontainers\/#Einbindung-von-pytest\" >Einbindung von pytest<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.inovex.de\/de\/blog\/lokales-pyspark-testing-mit-databricks-connect-devcontainers\/#Ein-Einblick-in-das-Python-Paket-von-Databricks-Connect\" >Ein Einblick in das Python-Paket von Databricks Connect<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.inovex.de\/de\/blog\/lokales-pyspark-testing-mit-databricks-connect-devcontainers\/#Minimales-Funktionsbeispiel\" >Minimales Funktionsbeispiel<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/www.inovex.de\/de\/blog\/lokales-pyspark-testing-mit-databricks-connect-devcontainers\/#Zusammenfassung\" >Zusammenfassung<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/www.inovex.de\/de\/blog\/lokales-pyspark-testing-mit-databricks-connect-devcontainers\/#Weiterfuehrende-Literatur\" >Weiterf\u00fchrende Literatur<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"Databricks-Connect-als-Bindeglied-zwischen-Ihnen-und-Databricks\"><\/span>Databricks Connect als Bindeglied zwischen Ihnen und Databricks<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Apache Spark ist eine der f\u00fchrenden Engines f\u00fcr verteilte Verarbeitung und Analyse und wird in einer Vielzahl unserer Projekte eingesetzt. Das PySpark-Paket bezeichnet die standardm\u00e4\u00dfige, native Methode zur Interaktion mit Spark unter Verwendung von Python. Im Hintergrund installiert es in seinem Paket Java-Abh\u00e4ngigkeiten, um lokale SparkSessions direkt auf Ihrem Entwicklungsrechner zu erstellen. Dieser Ansatz ist f\u00fcr die lokale Entwicklung und das Testen sehr leistungsf\u00e4hig, da er es Ihnen erm\u00f6glicht, Spark-Berechnungen auszuf\u00fchren, ohne eine Verbindung zu einem Remote-Cluster herstellen zu m\u00fcssen:<\/p>\n<pre class=\"lang:python decode:true\">from pyspark.sql import SparkSession\r\n\r\nspark = SparkSession.builder.getOrCreate()\r\ndf = spark.createDataFrame(\r\n\u00a0\u00a0\u00a0\u00a0[(1, \"foo\"),(2, \"bar\"),],\r\n\u00a0\u00a0\u00a0\u00a0[\"id\", \"label\"]\r\n)<\/pre>\n<p>In einer modernen Databricks-Umgebung kommt h\u00e4ufig die Client-Bibliothek \u201e<a href=\"https:\/\/docs.databricks.com\/aws\/en\/dev-tools\/databricks-connect\/\">Databricks Connect<\/a>\u201c zum Einsatz. Dieses Paket erm\u00f6glicht die Integration verschiedener IDEs wie PyCharm oder VSCode. Dadurch stehen Funktionen wie der Zugriff auf Databricks-Rechenressourcen, Debugging-Funktionen und vieles mehr zur Verf\u00fcgung. Connect l\u00e4sst sich wie gewohnt als Paket installieren:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-69326 size-full aligncenter\" src=\"https:\/\/www.inovex.de\/wp-content\/uploads\/1-5.png\" alt=\"Onboarding Databricks Connect\" width=\"1581\" height=\"416\" srcset=\"https:\/\/www.inovex.de\/wp-content\/uploads\/1-5.png 1581w, https:\/\/www.inovex.de\/wp-content\/uploads\/1-5-300x79.png 300w, https:\/\/www.inovex.de\/wp-content\/uploads\/1-5-1024x269.png 1024w, https:\/\/www.inovex.de\/wp-content\/uploads\/1-5-768x202.png 768w, https:\/\/www.inovex.de\/wp-content\/uploads\/1-5-1536x404.png 1536w, https:\/\/www.inovex.de\/wp-content\/uploads\/1-5-400x105.png 400w, https:\/\/www.inovex.de\/wp-content\/uploads\/1-5-360x95.png 360w\" sizes=\"auto, (max-width: 1581px) 100vw, 1581px\" \/><\/p>\n<p>Der Versuch, den nativen PySpark-Ansatz (Erstellung einer lokalen SparkSession) in einer f\u00fcr Databricks Connect konfigurierten Umgebung zu verwenden, f\u00fchrt zu einem RuntimeError, da Databricks Connect ausschlie\u00dflich Remote-Sitzungen unterst\u00fctzt:<\/p>\n<pre class=\"lang:python decode:true\" title=\"Unable to create a local session\">from pyspark.sql import SparkSession\r\n\r\nspark = SparkSession.builder.getOrCreate()\r\n# RuntimeError: Only remote Spark sessions using Databricks Connect are supported. Use DatabricksSession.builder to create a remote Spark session instead.<\/pre>\n<div>\n<p>Der Grund daf\u00fcr: Databricks Connect ersetzt Ihr bestehendes PySpark-Paket durch eine speziell f\u00fcr Databricks entwickelte Version. Diese ist ausschlie\u00dflich f\u00fcr Remote-Sitzungen ausgelegt, sodass die M\u00f6glichkeit, lokale Sitzungen zu hosten, entf\u00e4llt.<\/p>\n<ul>\n<li>Ein genauerer Blick auf das Connect-Paket verdeutlicht dieses Verhalten. Es werden ausschlie\u00dflich Remote-Konfigurationseinstellungen ausgewertet. Fehlen diese, wird standardm\u00e4\u00dfig der oben genannte RuntimeError ausgel\u00f6st.<\/li>\n<\/ul>\n<p>Anstatt Spark lokal auszuf\u00fchren, muss eine Verbindung von Ihrer IDE zu einem Remote-Spark-Cluster hergestellt werden, z. B. zu einem auf Databricks gehosteten Hochleistungscluster.<\/p>\n<ul>\n<li>Der besseren Lesbarkeit halber fahren wir mit einer Konfiguration fort, die lokal mit Remote-Sitzungen arbeitet. Wenn Sie an den Details interessiert sind, wie und warum Databricks Connect bestimmte Pakete wie PySpark ersetzt, springen Sie zum Abschnitt \u201eEin Einblick in Databricks Connect\u201c weiter unten.<\/li>\n<\/ul>\n<p>Um eine Verbindung zu einem Spark-Server herzustellen, k\u00f6nnen Sie weiterhin den Remote-Session-Builder aus dem ersetzten PySpark-Paket verwenden:<\/p>\n<\/div>\n<pre class=\"lang:python decode:true\" title=\"Creating a remote session\">from pyspark.sql import SparkSession\r\n\r\n# Remote session via Spark Connect (sc)\r\nspark = SparkSession.builder.remote(\"sc:\/\/&lt;SPARK-SERVER&gt;\").getOrCreate()<\/pre>\n<div>\n<p>F\u00fcr die Durchf\u00fchrung lokaler Tests bedeutet dies, dass Sie einen Spark-Server bereitstellen m\u00fcssen. Container vereinfachen dies erheblich.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Devcontainers-als-Loesung\"><\/span>Devcontainers als L\u00f6sung<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><a href=\"https:\/\/containers.dev\/\">Devcontainers<\/a> bieten einen modernen Ansatz, um die Entwicklungsumgebung reproduzierbar und konsistent zu halten. Ein typischer Ansatz ist ein einzelner Container, der die Laufzeitumgebung und die Bibliotheken des Produktionssystems widerspiegelt.<\/p>\n<p>Die Anforderung einer Remote-SparkSession l\u00e4sst sich durch die Einf\u00fchrung eines zweiten Devcontainers l\u00f6sen: eines Open-Source-Spark-Servers, der als Docker-Image bereitgestellt wird.<\/p>\n<\/div>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-69324 size-full\" src=\"https:\/\/www.inovex.de\/wp-content\/uploads\/2-6.png\" alt=\"Devcontainers with spark master\" width=\"1726\" height=\"546\" srcset=\"https:\/\/www.inovex.de\/wp-content\/uploads\/2-6.png 1726w, https:\/\/www.inovex.de\/wp-content\/uploads\/2-6-300x95.png 300w, https:\/\/www.inovex.de\/wp-content\/uploads\/2-6-1024x324.png 1024w, https:\/\/www.inovex.de\/wp-content\/uploads\/2-6-768x243.png 768w, https:\/\/www.inovex.de\/wp-content\/uploads\/2-6-1536x486.png 1536w, https:\/\/www.inovex.de\/wp-content\/uploads\/2-6-400x127.png 400w, https:\/\/www.inovex.de\/wp-content\/uploads\/2-6-360x114.png 360w\" sizes=\"auto, (max-width: 1726px) 100vw, 1726px\" \/><\/p>\n<p>Nachdem der SparkSession Builder so konfiguriert wurde, dass er auf den Container verweist, kann schlie\u00dflich mithilfe von Spark Connect eine Remote-SparkSession hergestellt werden.<\/p>\n<pre class=\"lang:default decode:true\" title=\"Creating a remote session to a spark container using the container name\">from pyspark.sql import SparkSession\r\n\r\n# Reference the name of the spark container\r\nspark = SparkSession.builder.remote(\"sc:\/\/spark\").getOrCreate()<\/pre>\n<h3><span class=\"ez-toc-section\" id=\"Einbindung-von-pytest\"><\/span>Einbindung von pytest<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Ein parametrisierter Test, der ein agnostisches Spark als Fixture verwendet, k\u00f6nnte wie folgt aussehen:<\/p>\n<pre class=\"lang:default decode:true \" title=\"Test example\"># tests\/test_spark.py\r\n\r\nfrom collections import namedtuple\r\nimport pytest\r\n\r\nMetadata = namedtuple(\"Metadata\", [\"description\"])\r\n\r\nPySparkTestParameter = namedtuple(\r\n\r\n\u00a0\u00a0\u00a0\u00a0\"PySparkTestParameter\", [\"metadata\", \"data\", \"schema\", \"expected_count\"]\r\n\r\n)\r\n\r\n@pytest.mark.parametrize(\r\n\u00a0\u00a0\u00a0\u00a0\"params\",\r\n\u00a0\u00a0\u00a0\u00a0[\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0PySparkTestParameter(\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0metadata=Metadata(\"simple\"),\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0data=[\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0(1, \"foo\"),\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0(2, \"bar\"),\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0],\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0schema=[\"id\", \"label\"],\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0expected_count=2,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0)\r\n\u00a0\u00a0\u00a0\u00a0],\r\n\u00a0\u00a0\u00a0\u00a0# more verbose logs\r\n\u00a0\u00a0\u00a0\u00a0ids=lambda p: p.metadata.description,\r\n)\r\n\r\ndef test_pyspark(spark, params):\r\n\u00a0\u00a0\u00a0\u00a0df = spark.createDataFrame(\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0data=params.data,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0schema=params.schema,\r\n\u00a0\u00a0\u00a0\u00a0)\r\n\u00a0\u00a0\u00a0\u00a0df.show()\r\n\u00a0\u00a0\u00a0\u00a0assert df.count() == params.expected_count<\/pre>\n<p>Bei Verwendung der Multi-Devcontainer-Konfiguration l\u00e4sst sich die Testumgebung wie folgt aufbauen:<\/p>\n<pre class=\"lang:default decode:true\" title=\"conftest\"># tests\/conftest.py\r\n\r\nimport pytest\r\nfrom pyspark.sql import SparkSession\r\n\r\n@pytest.fixture(scope=\"session\")\r\ndef spark() -&gt; SparkSession:\r\n\u00a0\u00a0\u00a0\u00a0_spark = SparkSession.builder.remote(\"sc:\/\/spark\").getOrCreate()\r\n\r\n\r\n\u00a0\u00a0\u00a0\u00a0# add missing configurations\r\n\u00a0\u00a0\u00a0\u00a0_spark.conf.set(\"spark.sql.pyspark.legacy.inferMapTypeFromFirstPair.enabled\", True)\r\n\u00a0\u00a0\u00a0\u00a0_spark.conf.set(\"spark.sql.execution.pandas.inferPandasDictAsMap\", False)\r\n\u00a0\u00a0\u00a0\u00a0return _spark<\/pre>\n<p>Wenn ich pytest jetzt ausf\u00fchre, erhalte ich die gew\u00fcnschte Ausgabe: Eine lokal ausgef\u00fchrte SparkSession unter Verwendung von Databricks Connect!<\/p>\n<pre class=\"lang:default decode:true\">((python_venv) ) vscode \u279c \/workspace (master) $ pytest -v\r\n==================================================================== test session starts =====================================================================\r\nplatform linux -- Python 3.12.12, pytest-9.0.2, pluggy-1.6.0 -- \/python_venv\/bin\/python\r\ncachedir: .pytest_cache\r\nrootdir: \/workspace\r\nconfigfile: pyproject.toml\r\nplugins: anyio-4.12.1\r\ncollected 1 item\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\r\n\r\ntests\/test_spark.py::test_pyspark[simple] PASSED<\/pre>\n<h2><span class=\"ez-toc-section\" id=\"Ein-Einblick-in-das-Python-Paket-von-Databricks-Connect\"><\/span>Ein Einblick in das Python-Paket von Databricks Connect<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>TL;DR: Databricks Connect ersetzt Ihr natives PySpark-Paket durch eine speziell f\u00fcr die Databricks-Plattform entwickelte Version, die keine lokale SparkSession hosten kann. Beide Pakete schlie\u00dfen sich gegenseitig aus.<\/p>\n<p>Werfen wir einen Blick auf das Paket von Databricks Connect selbst:<\/p>\n<pre class=\"lang:default decode:true\" title=\"Part of the content of the databricks connect wheel\">&gt; pip download databricks-connect -d download --no-dependencies\r\n&gt; cd download\r\n&gt; unzip databricks_connect-*.whl\r\n&gt; tree -L 2 .\r\n.\r\n\u251c\u2500\u2500 databricks\r\n\u2502 \u00a0 \u251c\u2500\u2500 __init__.py\r\n\u2502 \u00a0 \u2514\u2500\u2500 connect\r\n\u251c\u2500\u2500 databricks_connect-16.1.7-py2.py3-none-any.whl\r\n\u251c\u2500\u2500 databricks_connect-16.1.7.data\r\n\u2502 \u00a0 \u2514\u2500\u2500 scripts\r\n\u251c\u2500\u2500 databricks_connect-16.1.7.dist-info\r\n\u2502 \u00a0 \u251c\u2500\u2500 entry_points.txt\r\n\u2502 \u00a0 \u251c\u2500\u2500 METADATA\r\n\u2502 \u00a0 \u251c\u2500\u2500 RECORD\r\n\u2502 \u00a0 \u251c\u2500\u2500 top_level.txt\r\n\u2502 \u00a0 \u2514\u2500\u2500 WHEEL\r\n\u251c\u2500\u2500 delta\r\n\u2502 \u00a0 \u251c\u2500\u2500 __init__.py\r\n\u2502 \u00a0 \u2514\u2500\u2500 ...\r\n\u2514\u2500\u2500 pyspark\r\n\u251c\u2500\u2500 __init__.py\r\n\u251c\u2500\u2500 ...\r\n\u251c\u2500\u2500 sql.py\r\n\u251c\u2500\u2500 session.py\r\n\u2514\u2500\u2500 ...<\/pre>\n<p>Neben \u201edatabricks.connect\u201c selbst sind zwei weitere Pakete enthalten: \u201edelta\u201c und \u201epyspark\u201c. Bei n\u00e4herer Untersuchung des Wheel-Ordners `databricks_connect-16.1.7.dist-info` (weitere Informationen finden Sie unter <a href=\"https:\/\/packaging.python.org\/en\/latest\/specifications\/binary-distribution-format\/#binary-distribution-format\">https:\/\/packaging.python.org\/en\/latest\/specifications\/binary-distribution-format\/#binary-distribution-format<\/a>) stellen wir fest, dass Databricks Connect Vorrang vor zuvor installierten delta-\/pyspark-Paketen hat und diese ersetzt.<\/p>\n<pre class=\"lang:default decode:true\" title=\"Metadata of wheel\">&gt; cat databricks_connect-16.1.7.dist-info\/top_level.txt\r\ndatabricks\r\ndelta\r\npyspark\r\n\r\n&gt; cat databricks_connect-16.1.7.dist-info\/METADATA\r\n...\r\nProvides: pyspark\r\nObsoletes: pyspark\r\n...\r\n\r\n&gt; du -s -m pyspark\r\n11 pyspark # 11 Megabyte. Much less than native PySpark as Java dependencies are missing (required for local session)<\/pre>\n<h2><span class=\"ez-toc-section\" id=\"Minimales-Funktionsbeispiel\"><\/span>Minimales Funktionsbeispiel<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Klonen Sie das Beispiel und f\u00fchren Sie es selbst in der IDE Ihrer Wahl aus: <a href=\"https:\/\/github.com\/inovex\/databricks-pyspark-local-testing-demo\">https:\/\/github.com\/inovex\/databricks-pyspark-local-testing-demo<\/a><\/p>\n<h2><span class=\"ez-toc-section\" id=\"Zusammenfassung\"><\/span>Zusammenfassung<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Databricks Connect verhindert, dass Sie mit dem PySpark-Paket einen lokalen Spark-Server erstellen k\u00f6nnen. Sie k\u00f6nnen jedoch weiterhin Remote-Sitzungen erstellen, die auf Databricks gehostet werden oder Ihnen anderweitig zur Verf\u00fcgung stehen (z. B. ein lokal ausgef\u00fchrter Spark-Server). Mithilfe von DevContainern k\u00f6nnen Sie sowohl Ihre Entwicklungsumgebung als auch einen Spark-Server auf entwicklerfreundliche Weise hosten. Und Sie k\u00f6nnen Ihre Tests weiterhin wie gewohnt ausf\u00fchren.<\/p>\n<p>Der Nachteil dieses Ansatzes ist ein im Vergleich zum Databricks-\u00d6kosystem eingeschr\u00e4nkter Funktionsumfang. Einige Funktionen funktionieren m\u00f6glicherweise nicht f\u00fcr Ihren individuellen Anwendungsfall: Der Spark Connect-Server (und damit die Remote-Sitzung) bietet nur einen begrenzten Teil der Funktionen des gesamten Databricks-\u00d6kosystems. Funktionen, die auf einer tiefgreifenden Integration mit Databricks-spezifischen Diensten beruhen \u2013 wie spezielle Datentypen oder andere propriet\u00e4re Dienstprogramme \u2013, sind in dieser eigenst\u00e4ndigen Umgebung m\u00f6glicherweise nicht vollst\u00e4ndig verf\u00fcgbar. Entwickler m\u00fcssen sicherstellen, dass dieser Ansatz alle wesentlichen Funktionen abdeckt, die f\u00fcr ihren individuellen Anwendungsfall erforderlich sind.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Weiterfuehrende-Literatur\"><\/span>Weiterf\u00fchrende Literatur<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<ul>\n<li><a href=\"https:\/\/docs.databricks.com\/aws\/en\/dev-tools\/databricks-connect\/python\/\">Databricks Connect<\/a><\/li>\n<li><a href=\"https:\/\/docs.databricks.com\/aws\/en\/dev-tools\/databricks-connect\/python\/\">Use Spark Connect Server with Databricks Connect<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/inovex\/databricks-pyspark-local-testing-demo\">Minimal working example<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Tests sind ein Eckpfeiler jeder produktionsreifen Anwendung und erh\u00f6hen die Zuverl\u00e4ssigkeit sowohl bei der lokalen Entwicklung als auch in den Pipelines. Doch die Umstellung auf Cloud-native \u00d6kosysteme wie Databricks kann zu unerwarteten Schwierigkeiten f\u00fchren. Eine solche Schwierigkeit haben wir bei der Verwendung der Databricks-eigenen Client-Bibliothek \u201eDatabricks Connect\u201c festgestellt. Warum? Die Integration der Bibliothek kann lokale [&hellip;]<\/p>\n","protected":false},"author":334,"featured_media":71193,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"ep_exclude_from_search":false,"footnotes":""},"tags":[],"service":[411,925],"level":[1280],"coauthors":[{"id":334,"display_name":"Jan Niklas Steeg","user_nicename":"jsteeg"}],"class_list":["post-69038","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","service-data-engineering","service-software-craftsmanship"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Lokales PySpark Testing mit Databricks Connect &amp; Devcontainers - inovex GmbH<\/title>\n<meta name=\"description\" content=\"Erfahren Sie, wie sich Databricks Connect auf lokale PySpark-Testabl\u00e4ufe auswirkt und wie Sie mithilfe von Docker-Devcontainern eine reproduzierbare Testumgebung einrichten k\u00f6nnen.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.inovex.de\/de\/blog\/lokales-pyspark-testing-mit-databricks-connect-devcontainers\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Lokales PySpark Testing mit Databricks Connect &amp; Devcontainers - inovex GmbH\" \/>\n<meta property=\"og:description\" content=\"Erfahren Sie, wie sich Databricks Connect auf lokale PySpark-Testabl\u00e4ufe auswirkt und wie Sie mithilfe von Docker-Devcontainern eine reproduzierbare Testumgebung einrichten k\u00f6nnen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.inovex.de\/de\/blog\/lokales-pyspark-testing-mit-databricks-connect-devcontainers\/\" \/>\n<meta property=\"og:site_name\" content=\"inovex GmbH\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/inovexde\" \/>\n<meta property=\"article:published_time\" content=\"2026-10-23T09:21:28+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.inovex.de\/wp-content\/uploads\/Local-PySpark-Testing-with-Databricks-Connect-Devcontainers.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1500\" \/>\n\t<meta property=\"og:image:height\" content=\"880\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Jan Niklas Steeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/www.inovex.de\/wp-content\/uploads\/Local-PySpark-Testing-with-Databricks-Connect-Devcontainers-1024x601.png\" \/>\n<meta name=\"twitter:creator\" content=\"@inovexgmbh\" \/>\n<meta name=\"twitter:site\" content=\"@inovexgmbh\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jan Niklas Steeg\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"6\u00a0Minuten\" \/>\n\t<meta name=\"twitter:label3\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data3\" content=\"Jan Niklas Steeg\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/lokales-pyspark-testing-mit-databricks-connect-devcontainers\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/lokales-pyspark-testing-mit-databricks-connect-devcontainers\\\/\"},\"author\":{\"name\":\"Jan Niklas Steeg\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#\\\/schema\\\/person\\\/566ec94bc4810235927584df193f7fe3\"},\"headline\":\"Lokales PySpark Testing mit Databricks Connect &#038; Devcontainers\",\"datePublished\":\"2026-10-23T09:21:28+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/lokales-pyspark-testing-mit-databricks-connect-devcontainers\\\/\"},\"wordCount\":914,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/lokales-pyspark-testing-mit-databricks-connect-devcontainers\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.inovex.de\\\/wp-content\\\/uploads\\\/Local-PySpark-Testing-with-Databricks-Connect-Devcontainers.png\",\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/lokales-pyspark-testing-mit-databricks-connect-devcontainers\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/lokales-pyspark-testing-mit-databricks-connect-devcontainers\\\/\",\"url\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/lokales-pyspark-testing-mit-databricks-connect-devcontainers\\\/\",\"name\":\"Lokales PySpark Testing mit Databricks Connect & Devcontainers - inovex GmbH\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/lokales-pyspark-testing-mit-databricks-connect-devcontainers\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/lokales-pyspark-testing-mit-databricks-connect-devcontainers\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.inovex.de\\\/wp-content\\\/uploads\\\/Local-PySpark-Testing-with-Databricks-Connect-Devcontainers.png\",\"datePublished\":\"2026-10-23T09:21:28+00:00\",\"description\":\"Erfahren Sie, wie sich Databricks Connect auf lokale PySpark-Testabl\u00e4ufe auswirkt und wie Sie mithilfe von Docker-Devcontainern eine reproduzierbare Testumgebung einrichten k\u00f6nnen.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/lokales-pyspark-testing-mit-databricks-connect-devcontainers\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/lokales-pyspark-testing-mit-databricks-connect-devcontainers\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/lokales-pyspark-testing-mit-databricks-connect-devcontainers\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.inovex.de\\\/wp-content\\\/uploads\\\/Local-PySpark-Testing-with-Databricks-Connect-Devcontainers.png\",\"contentUrl\":\"https:\\\/\\\/www.inovex.de\\\/wp-content\\\/uploads\\\/Local-PySpark-Testing-with-Databricks-Connect-Devcontainers.png\",\"width\":1500,\"height\":880},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/lokales-pyspark-testing-mit-databricks-connect-devcontainers\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Lokales PySpark Testing mit Databricks Connect &#038; Devcontainers\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#website\",\"url\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/\",\"name\":\"inovex GmbH\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#organization\",\"name\":\"inovex GmbH\",\"url\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.inovex.de\\\/wp-content\\\/uploads\\\/2021\\\/03\\\/inovex-logo-16-9-1.png\",\"contentUrl\":\"https:\\\/\\\/www.inovex.de\\\/wp-content\\\/uploads\\\/2021\\\/03\\\/inovex-logo-16-9-1.png\",\"width\":1921,\"height\":1081,\"caption\":\"inovex GmbH\"},\"image\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/inovexde\",\"https:\\\/\\\/x.com\\\/inovexgmbh\",\"https:\\\/\\\/www.instagram.com\\\/inovexlife\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/inovex\",\"https:\\\/\\\/www.youtube.com\\\/channel\\\/UC7r66GT14hROB_RQsQBAQUQ\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#\\\/schema\\\/person\\\/566ec94bc4810235927584df193f7fe3\",\"name\":\"Jan Niklas Steeg\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5ae0a2538acacff99a3f1e991ef70218483b9ff5483f2a238032cfd56d7d31da?s=96&d=retro&r=g440aceff9f79687ee7c88007b607c39f\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5ae0a2538acacff99a3f1e991ef70218483b9ff5483f2a238032cfd56d7d31da?s=96&d=retro&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5ae0a2538acacff99a3f1e991ef70218483b9ff5483f2a238032cfd56d7d31da?s=96&d=retro&r=g\",\"caption\":\"Jan Niklas Steeg\"},\"url\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/author\\\/jsteeg\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Lokales PySpark Testing mit Databricks Connect & Devcontainers - inovex GmbH","description":"Erfahren Sie, wie sich Databricks Connect auf lokale PySpark-Testabl\u00e4ufe auswirkt und wie Sie mithilfe von Docker-Devcontainern eine reproduzierbare Testumgebung einrichten k\u00f6nnen.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.inovex.de\/de\/blog\/lokales-pyspark-testing-mit-databricks-connect-devcontainers\/","og_locale":"de_DE","og_type":"article","og_title":"Lokales PySpark Testing mit Databricks Connect & Devcontainers - inovex GmbH","og_description":"Erfahren Sie, wie sich Databricks Connect auf lokale PySpark-Testabl\u00e4ufe auswirkt und wie Sie mithilfe von Docker-Devcontainern eine reproduzierbare Testumgebung einrichten k\u00f6nnen.","og_url":"https:\/\/www.inovex.de\/de\/blog\/lokales-pyspark-testing-mit-databricks-connect-devcontainers\/","og_site_name":"inovex GmbH","article_publisher":"https:\/\/www.facebook.com\/inovexde","article_published_time":"2026-10-23T09:21:28+00:00","og_image":[{"width":1500,"height":880,"url":"https:\/\/www.inovex.de\/wp-content\/uploads\/Local-PySpark-Testing-with-Databricks-Connect-Devcontainers.png","type":"image\/png"}],"author":"Jan Niklas Steeg","twitter_card":"summary_large_image","twitter_image":"https:\/\/www.inovex.de\/wp-content\/uploads\/Local-PySpark-Testing-with-Databricks-Connect-Devcontainers-1024x601.png","twitter_creator":"@inovexgmbh","twitter_site":"@inovexgmbh","twitter_misc":{"Verfasst von":"Jan Niklas Steeg","Gesch\u00e4tzte Lesezeit":"6\u00a0Minuten","Written by":"Jan Niklas Steeg"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.inovex.de\/de\/blog\/lokales-pyspark-testing-mit-databricks-connect-devcontainers\/#article","isPartOf":{"@id":"https:\/\/www.inovex.de\/de\/blog\/lokales-pyspark-testing-mit-databricks-connect-devcontainers\/"},"author":{"name":"Jan Niklas Steeg","@id":"https:\/\/www.inovex.de\/de\/#\/schema\/person\/566ec94bc4810235927584df193f7fe3"},"headline":"Lokales PySpark Testing mit Databricks Connect &#038; Devcontainers","datePublished":"2026-10-23T09:21:28+00:00","mainEntityOfPage":{"@id":"https:\/\/www.inovex.de\/de\/blog\/lokales-pyspark-testing-mit-databricks-connect-devcontainers\/"},"wordCount":914,"commentCount":0,"publisher":{"@id":"https:\/\/www.inovex.de\/de\/#organization"},"image":{"@id":"https:\/\/www.inovex.de\/de\/blog\/lokales-pyspark-testing-mit-databricks-connect-devcontainers\/#primaryimage"},"thumbnailUrl":"https:\/\/www.inovex.de\/wp-content\/uploads\/Local-PySpark-Testing-with-Databricks-Connect-Devcontainers.png","inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.inovex.de\/de\/blog\/lokales-pyspark-testing-mit-databricks-connect-devcontainers\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.inovex.de\/de\/blog\/lokales-pyspark-testing-mit-databricks-connect-devcontainers\/","url":"https:\/\/www.inovex.de\/de\/blog\/lokales-pyspark-testing-mit-databricks-connect-devcontainers\/","name":"Lokales PySpark Testing mit Databricks Connect & Devcontainers - inovex GmbH","isPartOf":{"@id":"https:\/\/www.inovex.de\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.inovex.de\/de\/blog\/lokales-pyspark-testing-mit-databricks-connect-devcontainers\/#primaryimage"},"image":{"@id":"https:\/\/www.inovex.de\/de\/blog\/lokales-pyspark-testing-mit-databricks-connect-devcontainers\/#primaryimage"},"thumbnailUrl":"https:\/\/www.inovex.de\/wp-content\/uploads\/Local-PySpark-Testing-with-Databricks-Connect-Devcontainers.png","datePublished":"2026-10-23T09:21:28+00:00","description":"Erfahren Sie, wie sich Databricks Connect auf lokale PySpark-Testabl\u00e4ufe auswirkt und wie Sie mithilfe von Docker-Devcontainern eine reproduzierbare Testumgebung einrichten k\u00f6nnen.","breadcrumb":{"@id":"https:\/\/www.inovex.de\/de\/blog\/lokales-pyspark-testing-mit-databricks-connect-devcontainers\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.inovex.de\/de\/blog\/lokales-pyspark-testing-mit-databricks-connect-devcontainers\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.inovex.de\/de\/blog\/lokales-pyspark-testing-mit-databricks-connect-devcontainers\/#primaryimage","url":"https:\/\/www.inovex.de\/wp-content\/uploads\/Local-PySpark-Testing-with-Databricks-Connect-Devcontainers.png","contentUrl":"https:\/\/www.inovex.de\/wp-content\/uploads\/Local-PySpark-Testing-with-Databricks-Connect-Devcontainers.png","width":1500,"height":880},{"@type":"BreadcrumbList","@id":"https:\/\/www.inovex.de\/de\/blog\/lokales-pyspark-testing-mit-databricks-connect-devcontainers\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.inovex.de\/de\/"},{"@type":"ListItem","position":2,"name":"Lokales PySpark Testing mit Databricks Connect &#038; Devcontainers"}]},{"@type":"WebSite","@id":"https:\/\/www.inovex.de\/de\/#website","url":"https:\/\/www.inovex.de\/de\/","name":"inovex GmbH","description":"","publisher":{"@id":"https:\/\/www.inovex.de\/de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.inovex.de\/de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/www.inovex.de\/de\/#organization","name":"inovex GmbH","url":"https:\/\/www.inovex.de\/de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.inovex.de\/de\/#\/schema\/logo\/image\/","url":"https:\/\/www.inovex.de\/wp-content\/uploads\/2021\/03\/inovex-logo-16-9-1.png","contentUrl":"https:\/\/www.inovex.de\/wp-content\/uploads\/2021\/03\/inovex-logo-16-9-1.png","width":1921,"height":1081,"caption":"inovex GmbH"},"image":{"@id":"https:\/\/www.inovex.de\/de\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/inovexde","https:\/\/x.com\/inovexgmbh","https:\/\/www.instagram.com\/inovexlife\/","https:\/\/www.linkedin.com\/company\/inovex","https:\/\/www.youtube.com\/channel\/UC7r66GT14hROB_RQsQBAQUQ"]},{"@type":"Person","@id":"https:\/\/www.inovex.de\/de\/#\/schema\/person\/566ec94bc4810235927584df193f7fe3","name":"Jan Niklas Steeg","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/5ae0a2538acacff99a3f1e991ef70218483b9ff5483f2a238032cfd56d7d31da?s=96&d=retro&r=g440aceff9f79687ee7c88007b607c39f","url":"https:\/\/secure.gravatar.com\/avatar\/5ae0a2538acacff99a3f1e991ef70218483b9ff5483f2a238032cfd56d7d31da?s=96&d=retro&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5ae0a2538acacff99a3f1e991ef70218483b9ff5483f2a238032cfd56d7d31da?s=96&d=retro&r=g","caption":"Jan Niklas Steeg"},"url":"https:\/\/www.inovex.de\/de\/blog\/author\/jsteeg\/"}]}},"_links":{"self":[{"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/posts\/69038","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/users\/334"}],"replies":[{"embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/comments?post=69038"}],"version-history":[{"count":5,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/posts\/69038\/revisions"}],"predecessor-version":[{"id":71195,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/posts\/69038\/revisions\/71195"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/media\/71193"}],"wp:attachment":[{"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/media?parent=69038"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/tags?post=69038"},{"taxonomy":"service","embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/service?post=69038"},{"taxonomy":"level","embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/level?post=69038"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/coauthors?post=69038"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}