Zeppelin - 将变量从 Spark 传递到 Markdown 以生成动态叙述文本

Zeppelin - pass variable from Spark to Markdown to generate dynamic narrative text

是否可以将变量从 Spark 解释器(pyspark 或 sql)传递给 Markdown?要求是显示格式良好的文本(即 Markdown),例如“20 事件发生在 2017-01-01 和 2017-01-08 之间”,其中 20、2017-01-01 和 2017-01-08 是动态填充的基于其他段落的输出。

为了其他用户的利益而发布此内容,这是我能够找到的内容:

  • Markdown 段落只能包含静态文本。
  • 但是可以使用 Angular 解释器实现动态格式化文本输出。

(第一段)

%spark
// create data frame
val eventLogDF = ... 
// register temp table for SQL access
eventLogDF.registerTempTable( "eventlog" )

val query = sql( "select max(Date), min(Date), count(*) from eventlog" ).take(1)(0)
val maxDate = query(0).toString()
val minDate = query(1).toString()
val evCount = query(2).toString()

// bind variables which can be accessed from angular interpreter 
z.angularBind( "maxDate", maxDate )
z.angularBind( "minDate", minDate )
z.angularBind( "evCount", evCount ) 

(第二段)

%angular

<div>There were <b>{{evCount}} events</b> between <b>{{minDate}}</b> and <b>{{maxDate}}</b>.</div>

您也可以先将 markdown 翻译成 HTML 来打印出来,对于那些可能已经有输出 markdown 模板的人,或者您的 Zeppelin 环境没有 Angular 解释器(例如 K8s部署)。

首先,安装markdown2.

%sh
pip install markdown2

并使用它。

%pyspark
import markdown2

# prepare your markdown string
markdown_string = template_mymarkdown.format(**locals())
# use Zeppelin %html for output
print("%html", markdown2.markdown(markdown_string, extras=["tables"]))

截图举例: