我已经pyspark df如下:
FirstName LastName Score
Hello World [('Math', 90), ('Eng', 80)]
ABC XYZ [('Math', 90)]
列Score
只是Spark中的struct
类型,如下所示:
[Row(sub='Math', score=90), Row(sub='Eng', score=80)]
我想把这个Score
列作为Score_HTML。预期输出如下:
FirstName LastName Score_HTML
Hello World "<b>FullName:</b>Hello World <br><br> <table border="1"><tr><td>Sub</td><td>Score</td></tr><tr><td>Math</td><td>90</td></tr><tr><td>Eng</td><td>80</td></tr></table>"
ABC XYZ "<b>FullName:</b>ABC XYZ <br><br> <table border="1"><tr><td>Sub</td><td>Score</td></tr><tr><td>Math</td><td>90</td></tr></table>"
如何使用Jinja
模板实现此功能。
我甚至尝试从Spark转换为Pandas DF,然后应用Jinja模板,如下所示:
import jinja2
template = environment.from_string(
"""
<b>FullName:</b>{{ FirstName }} {{ LastName }} </br></br>
<table border="1"><tr><td>Sub</td><td>Score</td></tr><tr>
{% for value in df['Score'] %}
<td>"{{ value['sub'] }}"</td><td>"{{ value['score'] }}"</td>
{% endfor %}
</tr></table>
"""
)
df['Score_HTML'] = template.render(FirstName=df['FirstName'], LastName=df['FirstName']) ???
需要帮助定义Jinja模板并在DF [SparkDF或PandasDF]中使用它来实现这一点。
先谢了。
2条答案
按热度按时间am46iovg1#
我将使用
mapInPandas
方法来呈现jinja模板的每一行的Spark点阵yhuiod9q2#
溶液: