我需要从zeppelin中的%sql解释器导出csv格式的数据。我怎么能这样做? 我需要添加一个按钮并点击它,它应该导出csv中的数据,如客户端的sql解释器中的zeppelin中的图形所示。
答案 0 :(得分:4)
目前,这不受支持(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}
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"]
答案 1 :(得分:1)
这是shakedzy的代码移植到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