databricksazure-databricksdatabricks-notebook

How to display markdown output in databricks notebook from a python cell


With IPython/Jupyter it's possible to output markdown using the IPython display module and its MarkDownclass.

Example markdown output

Question

How can I accomplish this with Azure Databricks?

What I tried

Databricks display

Tried using Databrick's display with the IPython Markdown class:

from IPython.display import Markdown
display(Markdown('*some markdown* test'))

but this results in the following error:

Exception: Cannot call display(<class 'IPython.core.display.Markdown'>)

IPython display

I then tried to use IPython's display:

from IPython.display import display, Markdown
display(Markdown('*some markdown* test'))

but this just displays the text:

<IPython.core.display.Markdown object>

Example failed ouput

IPython display_markdown

Tried using IPython's display_markdown:

from IPython.display import display_markdown
display_markdown('# Markdown is here!\n*some markdown*\n- and\n- some\n- more')

but this results in nothing showing up:

Failed display_markdown

Looking up documentation

Also tried checking Azure Databricks documentation. At first I visited https://www.databricks.com/databricks-documentation which leads me to https://learn.microsoft.com/en-ca/azure/databricks/ but I wasn't able to find anything via searching or clicking the links and I usually find Microsoft documentation quite good.

Checking Databrick's display source

As Saideep Arikontham mentioned in the comments, Databricks version 11 and above is using IPython kernel so I dug a bit deeper.

According to Databrick's source for the display function, it will readily render any object that implements _repr_html().

Databricks display

However I'm having a hard time being able to get the raw html output that I'm assuming IPython.display.Markdown should be able to output. I can only find _repr_markdown_() and _data_and_metadata() where the former just calls the latter and the output, at least in Databricks, is just the original raw markdown string.


Solution

  • Markdown and display_markdown are not giving desired output when used in Azure Databricks. I have done the following in Databricks 11.1 runtime.

    from IPython.display import DisplayObject, TextDisplayObject
    
    class Markdown(TextDisplayObject):
    
        def __init__(self,TextDisplayObject):
            import markdown as md
            
            #converting markdown to html
            self.html = md.markdown(TextDisplayObject)
            
        
        def _repr_html_(self):
            return self.html
    
    Markdown('''# Markdown is here!\n
    *some markdown*\n
    - and\n
    - some\n
    - more''')
    

    enter image description here

    NOTE: