【问题标题】:export data in csv using zeppelin使用 zeppelin 以 csv 格式导出数据
【发布时间】:2016-04-10 03:41:00
【问题描述】:

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

【问题讨论】:

    标签: apache-zeppelin


    【解决方案1】:

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

    1. 您需要尝试导出的笔记本和段落的 ID。您可以通过单击要导出的段落的选项菜单中的“链接此段落”来获取它们。当你这样做时,你会得到一个新窗口。 ID 在新窗口的 url 中:http://localhost:8080/#/notebook/{Notebook-ID}/paragraph/{Paragraph-ID}?asIframe
    2. 使用Zeppelin Notebook API。向http://localhost:8080/api/notebook/{Notebook-ID}/paragraph/{Paragraph-ID} 发送 HTTP-GET 请求
    3. 响应是 json。字段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"]
    

    【讨论】:

    【解决方案2】:

    这里是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
    

    【讨论】:

      猜你喜欢
      • 2012-10-20
      • 2021-05-23
      • 2018-08-08
      • 2013-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-17
      • 2021-10-20
      相关资源
      最近更新 更多