ApacheZeppelin:通过浏览器将笔记本中的Dataframe保存到csv中的本地驱动器

9nvpjoqh  于 2021-05-29  发布在  Spark
关注(0)|答案(0)|浏览(264)

我的齐柏林飞艇安装(版本-0.9.0-preview1)在服务器上。我有一个sparkDataframe,我将其转换为pandasDataframe,假设它是一个简单的“df.to_csv()”。我确实意识到,当我使用%sql将dataframe绘制为sql表时,在功能区的右上角有一个下载csv的选项。只有当数据中的行数小于“zeppelin.spark.maxresult”时,这种方法才有效。我将“zeppelin.spark.maxresult”的值增加到25000,但这会导致浏览器速度变慢,应用程序崩溃。所以我把它降到了1万。我们只需要绘制10000行,但如果需要,我们希望能够在本地下载整个Dataframe,而不仅仅是有一个截断的数据集(等于'zeppelin.spark.maxresult'行)。
搜索之后,我发现了一个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> 在结果中。
我甚至试图调整这个代码,而不是 return HTML(html) 我把它改成了 display(HTML(html)) 在看了这里之后,我得到了同样的结果
另一个解决方案如这里所描述的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')

给了我一个csv保存在服务器上的路径 /folder/folder/df.csv .
现在我得想办法从 <IPython.core.display.HTML object> 或者我如何创建一个url,让我从服务器的位置下载文件 /folder/folder/df.csv . 按照齐柏林飞艇路由系统的设置方式,即使我将其保存在齐柏林飞艇内的笔记本文件夹(所有笔记本所在的文件夹)中,我仍然无法使用 http://server.com/#/notebook/df.csv 或者 http://server.com/notebook/df.csv 目录中的csv文件。据我所知,这可能是一种安全措施。
如有任何建议,将不胜感激。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题