如何从Python单元在databricks笔记本中显示Markdown输出

问题描述 投票:0回答:2

通过 IPython/Jupyter,可以使用 IPython 显示模块及其

MarkDown
输出 markdown。

Example markdown output

问题

如何使用 Azure Databricks 完成此任务?

我尝试了什么

数据块
display

尝试使用 Databrick 的显示与 IPython Markdown 类:

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

但这会导致以下错误:

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

IPython
display

然后我尝试使用 IPython 的

display
:

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

但这只是显示文本:

<IPython.core.display.Markdown object>

Example failed ouput

IPython
display_markdown

尝试使用 IPython 的

display_markdown
:

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

但这会导致什么也没有出现:

Failed display_markdown

查找文档

还尝试检查 Azure Databricks 文档。起初,我访问了 https://www.databricks.com/databricks-documentation,这导致我访问 https://learn.microsoft.com/en-ca/azure/databricks/ 但我无法通过搜索或单击链接找到任何内容,我通常发现 Microsoft 文档非常好。

检查 Databrick 的
display
来源

正如 Saideep Arikontham 在评论中提到的,Databricks 版本 11 及更高版本使用 IPython 内核,所以我深入研究了一些。

根据 Databrick 的

display
函数源代码,它将轻松渲染任何实现
_repr_html()
的对象。

Databricks display

但是,我很难获得我认为

IPython.display.Markdown
应该能够输出的原始 html 输出。我只能找到
_repr_markdown_()
_data_and_metadata()
,前者只是调用后者,而输出(至少在 Databricks 中)只是原始的原始降价字符串。

databricks azure-databricks databricks-notebook
2个回答
3
投票
在 Azure Databricks 中使用时,

Markdown
display_markdown
未提供所需的输出。我在 Databricks 11.1 运行时中完成了以下操作。

  • 从问题中获取输入,我了解到当一个类具有
    _repr_html()
    时,它就能够输出所需的结果。但是当类中没有这个方法时,它返回一个对象。
  • 因此,为了
    Markdown
    工作,我编写了自己的
    Markdown
    类,其中使用了 Python 的
    markdown
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
    并不完全相同。我已经格式化了你的降价示例
    '# Markdown is here!\n*some markdown*\n- and\n- some\n- more'
    如下以获得想要的结果。
Markdown('''# Markdown is here!\n
*some markdown*\n
- and\n
- some\n
- more''')

enter image description here

注意:

  • 为了让

    display_markdown()
    显示输出,我们必须指定另一个参数 raw 作为
    True
    (display_markdown(, raw=True))。但是,在 Databricks 中它返回未定义(NoneType)。

  • 请先在 Databricks 单元中使用

    %pip install markdown
    安装 Markdown 库。


0
投票

这是一个非常有用且简洁的解决方案。但是,我无法让它与表格一起使用。我打算获取数据框并输出包含文本和表格的标记报告。

为此,我的计划是将 Spark DataFrame 转换为 pandas DataFrame,然后使用 pandas to_markdown 函数创建表格文本,然后使用上述解决方案将其输出到 Databricks 单元格中。即

md_table = pd.Series(["elk", "pig", "dog", "quetzal"], name="animal").to_markdown()
markdown = f'''{md_table}'''
Markdown(markdown)

但是,这不起作用,我从单元格中得到以下输出:

| | animal | |---:|:---------| | 0 | elk | | 1 | pig | | 2 | dog | | 3 | quetzal |

如您所见,输出的行之间没有回车符,但将它们添加到字符串中也不起作用。

有人成功将 pandas(或 Spark)DataFrame 渲染为 markdown 吗?

© www.soinside.com 2019 - 2024. All rights reserved.