Azure Jupyter Notebook中Spark Dataframe美观显示(需横向滚动条)求助
我之前在Azure Jupyter Notebook里处理过几百列的Spark DataFrame,太懂这种挤成一团没法看的痛苦了!默认的display函数确实不给力,给你几个亲测好用的解决方案,能让表格美观还支持横向滚动:
方法1:转换为Pandas DataFrame并添加自定义样式
Spark原生的DataFrame展示对多列支持不好,转成Pandas之后可以用它的样式工具来控制表格的滚动行为。注意如果你的数据量特别大,先采样或者取部分行,避免内存溢出:
from IPython.display import display, HTML import pandas as pd # 先取部分数据(比如前100行)转成Pandas DataFrame sampled_pandas_df = spark_df.limit(100).toPandas() # 给表格添加横向滚动的CSS样式 styled_table = sampled_pandas_df.style.set_table_styles([ {'selector': 'table', 'props': [ ('overflow-x', 'auto'), ('display', 'block'), ('width', '100%') # 让表格占满单元格宽度 ]} ]).to_html() # 展示处理后的表格 display(HTML(styled_table))
方法2:全局设置Jupyter Notebook的CSS样式,一劳永逸
如果不想每次都手动处理,可以在Notebook里运行一段CSS代码,之后所有的DataFrame展示都会自动带上横向滚动:
from IPython.display import display, HTML display(HTML(""" <style> /* 针对Pandas生成的表格 */ .dataframe { overflow-x: auto !important; display: block !important; width: 100% !important; } /* 针对Spark原生的表格展示 */ div.output_html table { overflow-x: auto !important; display: block !important; } </style> """))
运行这个单元格之后,不管你是用display(spark_df)还是display(pandas_df),表格都会自动支持横向滚动,不用再重复设置。不过这个设置只在当前Notebook会话有效,重启Notebook后需要重新运行。
方法3:配合Spark显示选项优化效果
可以先调整Spark的全局显示配置,让列内容不自动截断,再结合上面的CSS设置,效果会更好:
# 设置Spark显示的最大行数和不自动截断列内容 spark.conf.set("spark.sql.repl.eagerEval.maxNumRows", 100) spark.conf.set("spark.sql.repl.eagerEval.truncate", False) # 直接展示Spark DataFrame,配合之前的CSS就会有横向滚动 display(spark_df)
这样设置后,列的内容会完整显示,再加上横向滚动,查看多列数据就方便多了!
内容的提问来源于stack exchange,提问作者Covo
相关产品推荐
相关产品推荐

