2016-01-06 13 views
5

zeppelinの%sqlインタプリタからcsv形式でデータをエクスポートする必要があります。どうすればいいですか? ボタンを追加する必要があります。クリックすると、クライアントサイドのSQLインタプリタのzeppelinのグラフに示すように、csvのデータをエクスポートする必要があります。zeppelinを使用してcsvでデータをエクスポート

答えて

3

現時点では、これはサポートされていません(Zeppelin 0.5.6)。それでも、これは次のバージョン(0.6.0)で追加されるようです。あなたはZeppelin git pageからのクローンを作成したり、私が使用している次の回避策を使用することができます。

  1. は、あなたがエクスポートしようとするノートPCや段落のIDが必要になります。エクスポートする段落のオプションメニューで[この段落をリンクする]をクリックすると、それらを取得できます。そうすると、新しいウィンドウが表示されます。 IDは新しいウィンドウのURLにあります。http://localhost:8080/#/notebook/{Notebook-ID}/paragraph/{Paragraph-ID}?asIframe
  2. Zeppelin Notebook APIを使用してください。 HTTP-GETリクエストをhttp://localhost:8080/api/notebook/{Notebook-ID}/paragraph/{Paragraph-ID}に送信
  3. 応答はjsonです。フィールドbody.result.msgは、結果をTSV(Tab Separated Values)として保持する文字列です。これはあなたが必要とするものです(CSVファイルを取得するには、それを解析して文字列の\t,に置き換えてください)。

シンプルなコードを使用すると、すぐにこの問題を解決できます。


EDIT:

ここではまさにこれを行うPythonスクリプトです。 getTSVを呼び出し、「この段落のリンク」をクリックしてから、それをあなたが得る段落のURLを送信します。

ここ
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

注意Zeppelinは、最初の1000行だけを表示します。 –

+0

SQLのUIでのみ。このスクリプトはすべてのデータを提供します – shakedzy

+0

奇妙な、ソースで私はそのような制限を読むことができます(https://github.com/apache/zeppelin/blob/master/jdbc/src/main/java/org/apache/zeppelin/jdbcを参照)。 /JDBCInterpreter.java#L540)、isnit? –

1

shakedzyのコードは、(私のような)の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 
関連する問題