2017-01-28 8 views
0

sparkのスプレッドシートファイルを読むためにhttps://github.com/potix2/spark-google-spreadsheetsライブラリを使用しています。それは私のローカルで完全に動作しています。Google Spread Sheet Sparkライブラリ

val df = sqlContext.read. 
    format("com.github.potix2.spark.google.spreadsheets"). 
    option("serviceAccountId", "[email protected]"). 
    option("credentialPath", "/path/to/credentail.p12"). 
    load("<spreadsheetId>/worksheet1") 

すべての資格情報を含む新しいアセンブリjarを作成し、そのjarファイルを読み込むために使用します。しかし、私はcredentialPathファイルを読むことに問題に直面しています。試してみました

getClass.getResourceAsStream("/resources/Aircraft/allAircraft.txt") 

ライブラリは絶対パスのみをサポートしています。この問題を解決するのを手伝ってください。

+0

資格情報をjarファイルに入れるのはやや難しい考えです。 ENV経由で渡すか、別々に展開してください。 – Reactormonk

+0

@Reactormonk、あなたは私にいくつかの提案を提供できますか?// ENVでの使用方法をリンクしてください。お問い合わせ – John

+0

おそらく関連:https://softwareengineering.stackexchange.com/questions/205606/strategy-for-keeping-secret-info-such-as-api-keys-out-of-source-control – Reactormonk

答えて

0

SBTを使用して、typesafe config libraryを試してください。

ここにはsimple but complete sampleがあり、resourcesフォルダにある設定ファイルから情報を読み込みます。

次に、sbt-assemblyプラグインを使用してjarファイルをアセンブルできます。

+0

タイプセーフな設定ライブラリを使ってconfiuratonを管理するのは本当に簡単です。ありがとうございました。しかし、私は本当にファイルのファイルの場所をjarから取得したいと思います。 http://stackoverflow.com/questions/941754/how-to-get-a-path-to-a-resource-in-a-java-jar-file。 typesafeを使用することは可能ですか?私はそれを行う方法を見つけることができませんでした。 @amirkarimi – John

+0

あなたが言ったように、ライブラリは絶対パスのみをサポートしています。リソースをストリームとして取得し、物理ファイルに書き込んでファイルパスをライブラリに渡すのはどうでしょうか?ただし、セキュリティ上重大な問題があるかもしれません。 –

+0

ところで、これを試してください:これをcredentialPathとして与えます: 'ClassLoader.getSystemResource("/resources/... ")。toURI()'。 –

0

--files引数を​​またはSparkContext.addFile()とすると、資格情報ファイルを配布できます。ワーカー・ノード内の信任状ファイルのローカル・パスを取得する場合は、SparkFiles.get("credential filename")を呼び出す必要があります。

import org.apache.spark.SparkFiles 

// you can also use `spark-submit --files=credential.p12` 
sqlContext.sparkContext.addFile("credential.p12") 
val credentialPath = SparkFiles.get("credential.p12") 

val df = sqlContext.read. 
    format("com.github.potix2.spark.google.spreadsheets"). 
    option("serviceAccountId", "[email protected]"). 
    option("credentialPath", credentialPath). 
    load("<spreadsheetId>/worksheet1") 
+0

本当にありがとうございます。私はあなたに知らせてくれます。 Btwは、このライブラリを使用してシートを更新することが可能です。 – John

関連する問題