解决Ubuntu下Pyspark中调用hist函数出现”No display name and no $DISPLAY environment variable”错误
这两天开始接触深度学习领域,在网上找了《Spark机器学习》电子书进行学习,在绘制直方图执行
hist(ages,bins=20,color='lightblue',normed=True)语句时候,出现如下错误:
Traceback(most recent call last):
File"simple_code.py", line 33, in <module>
plt.scatter(x, y, s=20)
File"/usr/lib/python2.7/matplotlib/pyplot.py", line 3078, in scatter
ax = gca()
File"/usr/lib/python2.7/matplotlib/pyplot.py", line 803, in gca
ax = gcf().gca(**kwargs)
File"/usr/lib/python2.7/matplotlib/pyplot.py", line 450, in gcf
return figure()
File"/usr/lib/python2.7/matplotlib/pyplot.py", line 423, in figure
**kwargs)
File"/usr/lib/python2.7/matplotlib/backends/backend_tkagg.py", line 79,in new_figure_manager
return new_figure_manager_given_figure(num,figure)
File"/usr/lib/python2.7/matplotlib/backends/backend_tkagg.py", line 87,in new_figure_manager_given_figure
window = Tk.Tk()
File"/usr/lib/python2.7/lib-tk/Tkinter.py", line 1712, in __init__
self.tk = _tkinter.create(screenName,baseName, className, interactive, wantobjects, useTk, sync, use)
_tkinter.TclError: no display name and no $DISPLAYenvironment variable
经过网上的不断搜索解决方法并不断尝试(好多都是英文),成功绘制了直方图
1.重新启动终端,这一步很多教程都没有提,也是我按照许多教程操作没有成功的原因。如果你也遇到了类似的问题,不妨先试试重启一个终端
2.使用ssh -X登录,由于我是只有单机配置,所以这里输入的是ssh -X localhost,输入用户密码即可成功登录ssh,当然也可以配置免密码登录,可参考我的上一篇文章
3.进入spark目录执行pyspark
cd $SPARK_HOME/bin
sudo ./pyspark
4.pyspark成功启动后,先导入必要的包(书里不提这个事情,所以按照书里步骤,直接提示hist not defined,真是坑害初学者)
matplotlib包需要自己提前安装,最简单的办法便是执行sudo apt-get install python-matplotlib
>>> from matplotlib.pyplot import *
5.再次执行hist语句,没有报错,但也没有显示预期的直方图
>>>hist(ages,bins=20,color='lightblue',normed=True)
(array([ 0.00064269, 0.00192808, 0.00449886, 0.0279572 , 0.02956393,
0.03374144, 0.04563129, 0.02538642, 0.02088756, 0.01863813,
0.02088756, 0.01606735, 0.0170314 , 0.01863813, 0.00674829,
0.00482021, 0.0054629 , 0.00192808, 0.00128539, 0.00128539]), array([ 7. , 10.3, 13.6, 16.9, 20.2, 23.5, 26.8, 30.1, 33.4,
36.7, 40. , 43.3, 46.6, 49.9, 53.2, 56.5, 59.8, 63.1,
66.4, 69.7, 73. ]), <a list of 20Patch objects>)
>>> fig=matplotlib.pyplot.gcf()
>>> fig.set_size_inches(16,10)
6.执行fig.show()语句,或执行fig.savefig语句,将生成的直方图保存到本地
>>> fig.show()
>>> fig.savefig("/home/3.png")
7.预期的直方图成功出现
注:如果执行了多个hist语句,可能造成多个图最后堆叠到一个图片中,这时可以执行clf()函数来清除所有图片,重新绘制
>>>clf() #清图
>>>cla() #清坐标轴
>>>close() #关窗口
PS:论画图,还是Windows下的Python要更省心……