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:

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:

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:

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.