With IPython/Jupyter it's possible to output markdown using the IPython display module and its MarkDown
class.
How can I accomplish this with Azure 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'>)
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>
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:
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.
display
sourceAs 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()
.
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.
Markdown
and display_markdown
are not giving desired output when used in Azure Databricks. I have done the following in Databricks 11.1 runtime.
_repr_html()
, it is able to output the desired result. But when this method is absent in class, it is returning an object.Markdown
to work, I have written my own Markdown
class where I used Python's markdown
library.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
IPython.display.Markdown
. I have formatted your sample markdown
'# Markdown is here!\n*some markdown*\n- and\n- some\n- more'
as following to get the desired result.Markdown('''# Markdown is here!\n
*some markdown*\n
- and\n
- some\n
- more''')
NOTE:
For display_markdown()
to display output, we must specify another argument raw as True
(display_markdown(<markdown_str>, raw=True)). However, in Databricks it is returning undefined (NoneType).
Please do install markdown library first using %pip install markdown
in Databricks cell.