Przechwytywanie skróconych wyjść komórek Databricks

Rafał Chłopek
Rafał Chłopek
June 23, 2025
9 min read
Loading the Elevenlabs Text to Speech AudioNative Player...

Przechwytywanie obciętych (truncated) outputów z komórek Databricks

Gdy uruchamiamy Capture Databricks’s cell w środowisku Azure, zazwyczaj otrzymujemy jakiś output z komórki. Może to wyglądać tak:
Najczęściej nie napotkamy problemów z takim podejściem. Niestety, zdarzają się przypadki, gdy Capture Databricks usunie część outputu. Dzieje się tak, gdy nasz skrypt generuje setki linii w outputcie. Jeśli rozmiar tak długiego outputu przekroczy limit Databricks (szacowany limit: 128 kB), notebook zwróci obcięty (truncated) output. Jeśli output nie zawiera ważnych informacji – możemy to zaakceptować. W innych przypadkach – możemy potrzebować wyciągnąć cenne dane z outputu i obcięcie (truncation) zniweczy efekty naszego skryptu lub uniemożliwi poznanie rzeczywistego outputu notebooka.

W naszym przypadku napotkaliśmy ten problem podczas wykonywania dużych zadań ingestion łączących się z Planorama API i Salesforce API. Poniżej widać przykład obciętego outputu:
Nasz output zwracał setki linii, ale tylko kilka z nich było istotnych. Chcieliśmy wyodrębnić trzy informacje: country code, day oraz download size dla danego kraju i dnia. Poniżej przykład outputu zawierającego te informacje:

Rozwiązaniem problemu obciętego outputu jest umieszczenie w naszym skrypcie fragmentów kodu do:

  • przechwytywania całego outputu,
  • parsowania tego outputu i zapisywania potrzebnych informacji,
  • wyświetlania raportu w HTML.

Użycie HTML do raportu to przydatny trik, który daje nam dodatkową metodę prezentowania informacji pod komórką, której nie obetnie capture Databricks.

Jak obejść problem truncated outputs za pomocą HTML: 3-krokowy proces Capture Databricks Outputs

Radzenie sobie z truncated outputs w Databricks może być wyzwaniem, szczególnie przy dużych zadaniach ingestion. Aby skutecznie przechwytywać outputy z Databricks i nie tracić cennych informacji, możesz zastosować ten 3-krokowy proces:

1. Przechwytywanie outputu
Najpierw należy umieścić poniższy kod przed główną częścią skryptu:

 

Example of a Databricks cell output in the Azure environment showing Spark Jobs execution with a filtered DataFrame and sample data preview.

To przygotuje zmienną Capture Databricks (z właściwością stdout), która będzie zawierać output z komórki. Później możemy odwoływać się do tej właściwości, gdy chcemy sprawdzić aktualny output.Dodatkowo przygotowujemy listę do przechowywania outputu podczas postępu ingestion:

Example of a truncated output warning showing skipped 49206 bytes of output during a large ingestion job connecting to Planorama API and Salesforce API

Parsowanie outputu i zapisywanie informacji do Capture Databricks Outputs
Na tym etapie, korzystając z capture.stdout, możemy przechwycić outputy z Databricks i wyodrębnić istotne informacje. Pozwala to parsować output i zapisywać tylko te dane, które są nam potrzebne.

Na przykład, w naszym przypadku użyliśmy poniższego skryptu (kluczowe zmienne zostały wyróżnione), aby wyciągnąć country codes, dates i download sizes. Skrypt był wstrzykiwany w pętlę ingestion, co pozwalało rozszerzać listę WholeOutput o sparsowane dane:

Example of a truncated output showing key details: country code (UK), day (2020-01-02), and download size (19679 bytes) extracted from the log

 

 Powyższa metoda generuje raport, który jest wyświetlany na końcu każdej iteracji pętli – dając nam częsty feedback o postępie ingestion.

Databricks zarzadzanie duzymi zbiorami danych

Share this post
Databricks
Rafał Chłopek
MORE POSTS BY THIS AUTHOR
Rafał Chłopek

Curious how we can support your business?

TALK TO US