【发布时间】:2016-04-10 03:41:00
【问题描述】:
我需要从 zeppelin 中的 %sql 解释器导出 csv 格式的数据。我该怎么做? 我需要添加一个按钮,然后单击它应该以 csv 格式导出数据,如客户端 sql 解释器中 zeppelin 中的图形所示。
【问题讨论】:
标签: apache-zeppelin
我需要从 zeppelin 中的 %sql 解释器导出 csv 格式的数据。我该怎么做? 我需要添加一个按钮,然后单击它应该以 csv 格式导出数据,如客户端 sql 解释器中 zeppelin 中的图形所示。
【问题讨论】:
标签: apache-zeppelin
目前不支持此功能(Zeppelin 0.5.6)。不过,这似乎将在下一个版本(0.6.0)中添加。您可以从 Zeppelin git page 克隆它,或者您可以使用我正在使用的下一个解决方法:
http://localhost:8080/#/notebook/{Notebook-ID}/paragraph/{Paragraph-ID}?asIframe
http://localhost:8080/api/notebook/{Notebook-ID}/paragraph/{Paragraph-ID} 发送 HTTP-GET 请求
body.result.msg 是一个将结果保存为 TSV(制表符分隔值)的字符串。这正是您所需要的(您可以解析它并将字符串中的所有\t 替换为, 以获取CSV 文件)。一个简单的代码可以让你立即解决这个问题。
编辑:
这是一个执行此操作的 Python 脚本。致电getTSV 并将您通过单击“链接此段落”获得的段落的网址发送给它:
import requests
import json
def parseURL(paragraphUrl):
url = paragraphUrl.split(":8080")
address = url[0]
vals = url[1].split("/")
notebook = vals[3]
paragraph = vals[5].split("?")[0]
return [address, notebook, paragraph]
def getData(address, notebook, paragraph):
response = requests.get(address + ":8080/api/notebook/" + notebook + "/paragraph/" + paragraph)
return response.text
def getTSV(paragraphUrl):
# This function gets the same url that you get from clicking on "Link this paragraph"
[address, notebook, paragraph] = parseURL(paragraphUrl)
response = getData(address,notebook,paragraph)
return json.loads(response)["body"]["result"]["msg"]
【讨论】:
这里是shadedzy 的移植到ruby 的代码,对于任何可能更喜欢它而不是python 的人(比如我):
require 'net/http'
require 'json'
def get_zeppelin_data(paragraph_url)
rx = %r{http://([\w\d]+):([\d]+)/?#/notebook/([\w\d]+)/paragraph/([\d\-_]+)}
address, port, notebook_id, paragraph_id = paragraph_url.match(rx).captures
api_url = "http://#{address}:#{port}/api/notebook/#{notebook_id}/paragraph/#{paragraph_id}"
result = Net::HTTP.get(URI(api_url))
data = JSON.parse(result)
data["body"]["result"]["msg"]
end
【讨论】: