Eine benutzerdefinierte Funktion auf der CPU kann eine ansonsten GPU-beschleunigte Apache-Spark-Abfrage unterbrechen. Das cuDF-Plugin kann beliebigen UDF-Code im Allgemeinen nicht übersetzen: Es wandelt Spaltendaten in Zeilen um, führt die Funktion auf der CPU aus und wandelt das Ergebnis anschließend zurück. NVIDIAs Leitfaden vom 13. Oktober beschreibt Agenten-Skills, mit denen eine UDF als Spark SQL, als spaltenbasierte RapidsUDF oder als RapidsUDF mit CUDA-Unterstützung neu geschrieben werden kann. Für Datentechniker lautet die entscheidende Frage, ob eine Neufassung dieselben Antworten liefert, im relevanten Plan auf der GPU bleibt und den tatsächlichen Job verbessert.
Dies ist ein dokumentationsbasierter Leitfaden. BIG CHANGE hat die Skills nicht ausgeführt, keine UDF getestet und keine Spark-Workload gemessen.
Die große Veränderung
- Was sich geändert hat: NVIDIA hat einen mehrstufigen Agenten-Workflow veröffentlicht, der UDF-Tests generiert, eine Funktion umwandelt, die Umwandlung bewertet, CPU- und GPU-Versionen benchmarket und optional eine cuDF-Implementierung optimiert.
- Wem es hilft: Technikern mit einer GPU-fähigen RAPIDS/cuDF-Spark-Pipeline und einer bestimmten CPU-UDF, die diese unterbricht.
- Was zu prüfen ist: Übereinstimmende Ausgaben bei repräsentativen Grenzfällen, ein Ausführungsplan ohne den gezielten CPU-Fallback und wiederholbare Leistung auf Job-Ebene mit der vorgesehenen Hardware.
Vor dem Start
Wählen Sie eine UDF, die Sie dem Programmieragenten freigeben dürfen. Geben Sie keine Zugangsdaten, sensiblen Eingabezeilen oder proprietären Datensätze in den Prompt, sofern Agent und Umgebung dafür nicht zugelassen sind. Stellen Sie den UDF-Quellcode, seine Registrierung und Aufrufstelle, relevante Schemata, das erwartete Verhalten bei Nullwerten und Fehlern sowie eine kleine zulässige Testvorrichtung bereit. Notieren Sie Plan und Laufzeit des vorhandenen Spark-Jobs als Vergleichsbasis.
Der Skills-README ist der versionierte Einstieg in den Workflow. Zum Erstellen von UDFs verlangt es Maven und ein JDK sowie einen kompatiblen Spark/RAPIDS/cuDF/CUDA-Stack und eine GPU. Prüfen Sie vor der Installation den aktuellen Kompatibilitätsleitfaden des Plugins für Ihre Spark-Distribution, Scala-Version, Ihren Treiber, CUDA-Build und Ihre GPU. Eine Cloud-GPU ist eine Alternative zur lokalen Hardware; der Anbieter berechnet Instanzzeit und Speicher. Auch die Nutzung von Agent oder Modell kann Kosten verursachen. Das README bietet ein Projektgerüst und Beispiele, kann aber weder Kompatibilität noch Leistung auf Ihrem Cluster belegen.
Eine Funktion neu schreiben und prüfen
- Legen Sie zunächst das ursprüngliche Verhalten fest. Bitten Sie den Agenten, bei der ausgewählten UDF
udf-gen-testzu verwenden, und prüfen Sie die generierten Tests selbst. Ergänzen Sie echte Fälle aus dem Vertrag: gegebenenfalls Nullwerte, leere Zeichenfolgen oder Sammlungen, fehlerhafte Eingaben, Grenzwerte, numerische Genauigkeit, Reihenfolge und Fehlerverhalten. Führen Sie die ursprüngliche UDF damit aus. Erwartet wird eine bestandene Basistestsuite, noch keine Neufassung. NVIDIAs Temperaturfunktionsbeispiel gibt bei einer Null-Eingabe ausdrücklich null zurück; die SQL-Neufassung ist nur sinnvoll, wenn dieses Verhalten auch mit Ihren Datentypen und Spark-Einstellungen erhalten bleibt. - Wählen Sie das einfachste unterstützte Ziel. Wenn sich die Logik mit Spark SQL oder DataFrame-Ausdrücken darstellen lässt, bitten Sie um
udf-convert-to-sql. Dadurch wird der Ausdruck für den Spark-Planer sichtbar, der unterstützte Operationen möglicherweise durch GPU-Äquivalente ersetzen kann. Lässt sich die benötigte Logik mit SQL nicht sauber ausdrücken, bitten Sie umudf-convert-to-cudf: DessenRapidsUDF.evaluateColumnarnimmt GPU-Spaltenvektoren entgegen und setzt cuDF-Operationen zusammen. Verwenden Sieudf-convert-to-cudanur für Logik, die einen eigenen Kernel über JNI benötigt und deren zusätzlicher Implementierungs- und Wartungsaufwand gerechtfertigt ist. Das sind Optionen zur Bewertung, keine Zusage, dass jede Operation auf der GPU läuft. - Prüfen Sie die Umwandlung, bevor Sie sie übernehmen. Vergleichen Sie die umgeschriebene Implementierung mit dem Original und führen Sie beide mit denselben freigegebenen Testfällen aus. Das Repository führt außerdem
udf-judge-conversionfür eine separate Prüfung von Testlücken und Umwandlungsfehlern auf. Prüfen Sie Typen, Null-Weitergabe, Rundung, Ausnahmen, Reihenfolge und Ressourcenverwaltung. Bei einer cuDF-Neufassung sollten Sie die Lebensdauer temporärer Spalten und Skalare kontrollieren; das Scala-Beispiel des Tutorials verwendet Ressourcen mit begrenztem Gültigkeitsbereich und gibt die Ergebnisspalte zurück. Eine bestandene generierte Testsuite ist ein nützlicher Beleg, aber ein Mensch muss weiterhin entscheiden, ob sie den Funktionsvertrag abdeckt. - Prüfen Sie den ausgeführten Plan. Führen Sie die geänderte Abfrage mit aktiviertem cuDF-Plugin aus und prüfen Sie Plan und RAPIDS-Diagnosen für den Zieloperator und angrenzende Umwandlungen. NVIDIAs Plugin-Übersicht sagt, dass nicht unterstützte SQL-Operationen auf die Spark-CPU-Ausführung zurückfallen. Zeigt der Plan die UDF oder umgebende Operatoren weiterhin auf der CPU, ermitteln Sie den nicht unterstützten Ausdruck oder Typ und überdenken Sie die Zielwahl. Bewahren Sie die Pläne vor und nach der Änderung mit dem Testergebnis auf. Eine Klasse mit dem Namen
RapidsUDFallein beweist nicht, dass der gesamte Job auf der GPU bleibt. - Benchmarken Sie den Job, den Sie ausführen wollen. Verwenden Sie
udf-benchmark, um Original und geänderte Implementierung mit denselben Eingaben, derselben Clustergröße, Konfiguration und Messmethode zu vergleichen. Notieren Sie Laufzeit, Eingabegröße, Ausgabegleichheit und GPU-/CPU-Ressourcenverbrauch. Wiederholen Sie die Läufe, um Start-, Cache- oder Konkurrenzwirkungen zu erkennen. Erwartet wird ein reproduzierbarer Vergleich, selbst wenn die Neufassung schlechter abschneidet. Ist eine korrekte cuDF-Version langsam, bietet das Repositoryudf-optimize-cudfzum Profilieren und Überarbeiten an; wiederholen Sie nach jeder Änderung die Korrektheits- und Planprüfungen.
So sieht ein erfolgreiches Ergebnis aus
Der Kandidat ist für eine normale Codeprüfung bereit, wenn die Ausgaben der gewählten UDF in den freigegebenen Fällen dem dokumentierten Verhalten entsprechen, der ausgeführte Plan den gezielten CPU-Fallback nicht mehr enthält und ein repräsentativer Benchmark ein lohnendes Gesamtergebnis zeigt. Schlägt eine Prüfung fehl, behalten Sie die ursprüngliche Implementierung bei, beschränken Sie die Neufassung auf den fehlerhaften Ausdruck und wiederholen Sie diese Stufe. Eine semantische Abweichung wiegt schwerer als ein schnellerer Benchmark; ein unveränderter Plan belegt den vorgesehenen GPU-Pfad nicht.
NVIDIA berichtet von einem Produktionseinsatz, bei dem eine cuDF-aktivierte UDF die Operatorzeit bei einer Workload mit 600 Milliarden Zeilen von 274,55 auf 12,78 Stunden senkte. Das sind vom Anbieter gemeldete Operatorzeiten für diese Workload, keine Prognose für eine andere UDF und kein Ergebnis eines durchgängigen Jobs. Die weitergehende 22-fache Angabe ist in diesem Zusammenhang zu lesen. GPU-Kapazität, Datenbewegung, nicht unterstützte Operationen, Codeprüfung und Cloudkosten können das Ergebnis Ihrer Pipeline verändern.
Quellen und weiterführende Lektüre
- NVIDIA Technical Blog, 13. Oktober 2026: Erläutert CPU-Fallback, die Wahl zwischen SQL/cuDF/CUDA, die vier Workflow-Stufen und das einzige von der Firma angeführte Leistungsbeispiel. Die Leistungszahlen stammen vom Anbieter.
- NVIDIA-cuDF-Spark-Skills, festgelegte Repository-Revision: Versionierter Einstieg für das Gerüst und die einzelnen Skills. Die festgelegte GitHub-Seite war über unseren Abrufweg nicht verfügbar; die Workflow-Details wurden mit NVIDIAs Tutorial und dem zugänglichen Skills-README im Hauptzweig des Repositories abgeglichen.
- Übersicht des cuDF-Plugins für Apache Spark: Aktuelle Einrichtungs- und Kompatibilitätsinformationen sowie die ausdrückliche Regel, dass nicht unterstützte Operationen auf der Spark-CPU ausgeführt werden. Prüfen Sie vor der Umsetzung die Kompatibilitätsliste der jeweiligen Version.



