如何正确展示列数较多的PySpark DataFrame 实现滚动查看效果
问题
我有一个列数非常多的大型PySpark DataFrame,需要正常展示其内容,不想要默认的垂直折行展示形式,是否有支持滚动查看的方案?
可行方案
根据你使用PySpark的不同环境,可以选对应的实现方式:
Jupyter Notebook/Lab 环境
这是最常遇到宽表折行问题的场景,两种实现方式都能做到不折行、横向滚动查看:
- 直接配置Spark原生的eagerEval展示规则 + 自定义样式
先设置Spark运行参数,关闭内容截断:
新建单元格运行以下CSS配置,强制表格不折行、开启横向滚动:spark.conf.set("spark.sql.repl.eagerEval.enabled", True) spark.conf.set("spark.sql.repl.eagerEval.maxNumRows", 20) # 自定义要展示的行数 spark.conf.set("spark.sql.repl.eagerEval.truncate", False) # 关闭列值截断
配置完成后,直接在单元格里输入DataFrame变量名运行(不需要调用%%html <style> table.dataframe tr { white-space: nowrap; } .output_area .output_subarea { overflow-x: auto; } </style>show()方法),输出的表格就不会折行,超出页面宽度的部分可以通过横向滚动条查看。 - 采样转pandas展示
先配置pandas的展示规则,关闭自动折行:
Jupyter会自动给超出宽度的pandas表格加上横向滚动条,不会出现垂直折行的情况。import pandas as pd pd.set_option('display.max_columns', None) pd.set_option('display.expand_frame_repr', False) # 必须加limit限制拉取的行数,避免全量数据拉取撑爆驱动内存 df.limit(100).toPandas()
终端PySpark Shell环境
直接调整show()方法的参数即可:
# 第一个参数为展示行数,truncate=False关闭列截断,vertical=False关闭垂直展示模式 df.show(n=20, truncate=False, vertical=False)
现代终端(iTerm2、Windows Terminal、WSL终端等)默认支持横向滚动,超出终端宽度的内容不会被强制折行,直接滑动终端滚动条就能查看所有列。
增强交互方案
如果需要搜索、排序、滚动查看更多行,可以采样数据后用交互式表格库展示:
from itables import init_notebook_mode init_notebook_mode(all_interactive=True) # 同样注意先limit采样,不要直接转全量大表 df.limit(1000).toPandas()
这种方式生成的表格自带横向、纵向滚动条,支持列排序、关键词搜索,适合列数、行数都比较多的采样查看场景。
注意:所有调用
toPandas()的操作都会把数据从集群拉取到Spark驱动节点本地内存,一定要提前用limit()限制采样的行数,大表全量拉取会直接导致驱动节点OOM。
内容的提问来源于stack exchange,提问作者rrryok
相关产品推荐
相关产品推荐

