我的Zeppelin安装(版本-0.9.0-preview1)在服务器上。我有一个Spark数据框,我将其转换为Pandas数据框,假设这将是一个简单的“ df.to_csv()”。我确实意识到,当我使用%sql将数据帧绘制为SQL表时,在氦功能区的右上角有一个用于下载csv的选项。仅当数据中的行数小于“ zeppelin.spark.maxResult”时,此方法才有效。我将“ zeppelin.spark.maxResult”的值增加到25,000,但这会使浏览器变慢,应用程序崩溃了。所以我将其减少到10,000。我们只需要绘制10,000行,但是如果需要,我们希望能够在本地下载整个数据框,而不仅仅是具有被截断的数据集(等于'zeppelin.spark.maxResult'行)。
搜索后,我从here中遇到了以下python函数:
import base64
import pandas as pd
from IPython.display import HTML
def create_download_link( df, title = "Download CSV file", filename = "data.csv"):
csv = df.to_csv()
b64 = base64.b64encode(csv.encode())
payload = b64.decode()
html = '<a download="{filename}" href="data:text/csv;base64,{payload}" target="_blank">{title}</a>'
html = html.format(payload=payload,title=title,filename=filename)
return HTML(html)
df = pd.DataFrame(data = [[1,2],[3,4]], columns=['Col 1', 'Col 2'])
create_download_link(df)
但是我得到的结果是<IPython.core.display.HTML object>
。
我什至试图调整这段代码,在查看here之后,我将其更改为return HTML(html)
而不是display(HTML(html))
here中所述的另一种针对Jupyter笔记本的解决方案。我尝试了部分建议的代码:
def csv_download_link(df, csv_file_name):
"""Display a download link to load a data frame as csv from within a Jupyter notebook"""
df.to_csv(csv_file_name, index=False)
from IPython.display import FileLink
display(FileLink(csv_file_name))
csv_download_link(df, 'df.csv')
仅给我一条保存服务器/folder/folder/df.csv
上csv的路径。
现在,我必须弄清楚如何从<IPython.core.display.HTML object>
获取数据,或者如何创建一个URL,该URL可以让我从位置/folder/folder/df.csv
的服务器下载文件。 Zeppelin路由系统的设置方式,即使我将其保存在Zeppelin内的笔记本文件夹(所有笔记本所在的文件夹)中,尽管存在csv文件,我仍然无法使用http://server.com/#/notebook/df.csv
或http://server.com/notebook/df.csv
访问该文件在目录中。据我了解,这可能是一种安全措施。
任何建议将不胜感激。