Apache Zeppelin:通过笔记本计算机将DataFrame从笔记本保存到csv到本地驱动器

时间:2020-06-12 00:12:37

标签: pandas apache-spark export-to-csv apache-zeppelin downloadfile

我的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.csvhttp://server.com/notebook/df.csv访问该文件在目录中。据我了解,这可能是一种安全措施。

任何建议将不胜感激。

0 个答案:

没有答案