改进PySpark DataFrame.show输出以适应Jupyter笔记本

时间:2018-05-25 07:41:13

标签: python pandas apache-spark pyspark jupyter

在Jupyter笔记本中使用PySpark,与Pandas DataFrames的显示方式相比,Spark的DataFrame.show输出效率低。我认为“嗯,它完成了工作”,直到我得到了这个:

enter image description here

输出未调整到笔记本的宽度,因此线条以丑陋的方式包裹。有没有办法定制这个?更好的是,有没有办法获得输出Pandas风格(显然没有转换为pandas.DataFrame)?

5 个答案:

答案 0 :(得分:1)

通过将spark.sql.repl.eagerEval.enabled设置为True,现在是Spark 2.4.0的possible natively

enter image description here

答案 1 :(得分:1)

除了上面pyspark show dataframe as table with horizontal scroll in ipython notebook中给出的@ karan-singla和@ vijay-jangir给出的答案之外,还可以像这样用方便的单线注释掉white-space: pre-wrap样式:

$ awk -i inplace '/pre-wrap/ {$0="/*"$0"*/"}1' $(dirname `python -c "import notebook as nb;print(nb.__file__)"`)/static/style/style.min.css

这翻译为;使用awk更新包含pre-wrap inplace 行,将其用*/ -- */包围,即注释掉您在styles.css中找到的文件工作的Python环境。

从理论上讲,如果人们使用多个环境(例如Anaconda),则可以将其用作别名。

参考:

答案 2 :(得分:0)

在我的表有很多列之后,我决定最好的方法就是使用数据:

return $this->redirectToRoute('route', [
    'request' => $request
], 307);

这将垂直显示它而不被截断,这是我能想到的最清晰的视图。

答案 3 :(得分:0)

您可以使用html magic命令。通过检查输出单元格来检查CSS选择器是否正确。然后在下面进行相应的编辑,然后在单元格中运行它。

%%html
<style>
div.output_area pre {
    white-space: pre;
}
</style>

答案 4 :(得分:-1)

在数据框中获取长值的子字符串以改善格式。

df = df.select(a, substring(col("b"), 4, 6).as("b1"), c)