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"]))
截图举例:
是否可以将变量从 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"]))
截图举例: