使用zeppelin在csv中导出数据

时间:2016-01-06 05:53:48

标签: apache-zeppelin

我需要从zeppelin中的%sql解释器导出csv格式的数据。我怎么能这样做? 我需要添加一个按钮并点击它,它应该导出csv中的数据,如客户端的sql解释器中的zeppelin中的图形所示。

2 个答案:

答案 0 :(得分:4)

目前,这不受支持(Zeppelin 0.5.6)。似乎这将在下一个版本(0.6.0)中添加。你可以从Zeppelin git page克隆它,或者你可以使用我正在使用的下一个解决方法:

  1. 您需要您尝试导出的笔记本和段落的ID。您可以通过单击要导出的段落的选项菜单中的“链接此段落”来获取它们。当你这样做时,你会得到一个新窗口。 ID位于新窗口的网址中:http://localhost:8080/#/notebook/{Notebook-ID}/paragraph/{Paragraph-ID}?asIframe
  2. 使用Zeppelin Notebook API。向http://localhost:8080/api/notebook/{Notebook-ID}/paragraph/{Paragraph-ID}
  3. 发送HTTP-GET请求
  4. 响应是json。字段body.result.msg是一个字符串,其结果为TSV(制表符分隔值)。这几乎是您所需要的(您可以解析它并用\t替换字符串中的所有,以获取CSV文件。)
  5. 一个简单的代码可以立即解决这个问题。

    修改

    这是一个完成此操作的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