2016-01-06 2 views
5

का उपयोग कर सीएसवी में निर्यात डेटा मुझे ज़ेप्पेलिन में अपने% sql दुभाषिया से सीएसवी प्रारूप में डेटा निर्यात करने की आवश्यकता है। ऐसा मैं किस प्रकार करूं? मुझे एक बटन जोड़ने की आवश्यकता है और उस पर क्लिक करने पर उसे सीएसवी में डेटा निर्यात करना चाहिए जैसा क्लाइंट साइड पर एसक्यूएल दुभाषिया में ज़ेपेल्लिन में ग्राफ द्वारा दिखाया गया है।zeppelin

उत्तर

3

फिलहाल, यह समर्थित नहीं है (ज़ेपेल्लिन 0.5.6)। फिर भी, ऐसा लगता है कि यह अगले संस्करण (0.6.0) में जोड़ा जाएगा। आप Zeppelin git page से यह क्लोन कर सकते हैं, या आप अगले काम के आसपास है कि मैं उपयोग कर रहा हूँ का उपयोग कर सकते हैं:

  1. आप नोटबुक और पैरा जो आप निर्यात करने की कोशिश की आईडी की आवश्यकता होगी। आप पैराग्राफ के विकल्प मेनू में "इस पैराग्राफ को लिंक करें" पर क्लिक करके उन्हें प्राप्त कर सकते हैं, जिन्हें आप निर्यात करना चाहते हैं। जब आप ऐसा करते हैं, तो आपको एक नई विंडो मिल जाएगी। आईडी नई विंडो के यूआरएल में हैं: 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 अनुरोध भेजें प्रतिक्रिया एक जेसन है। क्षेत्र body.result.msg एक स्ट्रिंग है जो परिणाम को टीएसवी (टैब सेपरेटेड वैल्यूज) के रूप में धारण करता है। यह बहुत अधिक है जो आपको चाहिए (आप इसे पार्स कर सकते हैं और CSV फ़ाइल प्राप्त करने के लिए , के साथ स्ट्रिंग में सभी \t को प्रतिस्थापित कर सकते हैं)।

एक साधारण कोड आपको इस समय काम नहीं कर सकता है।


संपादित करें:

यहाँ एक अजगर स्क्रिप्ट जो वास्तव में इस करता है। 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"] 
+0

ध्यान दें ज़ेपेल्लिन केवल पहली 1000 पंक्तियों को प्रदर्शित करता है। –

+0

केवल एसक्यूएल यूआई में। यह स्क्रिप्ट सभी डेटा – shakedzy

+0

अजीब देता है, स्रोत में मैं ऐसी सीमा पढ़ सकता हूं (https://github.com/apache/zeppelin/blob/master/jdbc/src/main/java/org/apache/zeppelin/jdbc देखें /JDBCInterpreter.java#L540), isnit? –

1
यहाँ

shakedzy के कोड रूबी के लिए भेजा, किसी को भी है कि (मेरे जैसे) अजगर के साथ यह पसंद कर सकते हैं के लिए है:

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