2017-01-28 2 views
0

Я использую библиотеку https://github.com/potix2/spark-google-spreadsheets для чтения листа с расширением листа в искрых. Он отлично работает в моем местном.Google Spread Sheet Spark library

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

Я создал новую сборную банку с включенными всеми учетными данными и использую эту банку для чтения файла. Но я столкнулся с проблемой чтения файла credentialPath. Я пробовал использовать

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

Но библиотека поддерживает абсолютный путь. Пожалуйста, помогите мне решить эту проблему.

+0

Возможно, это из-за плохой идеи поместить учетные данные в банку. Пропустите его через ENV или разворачивайте его отдельно. – Reactormonk

+0

@Reactormonk, Можете ли вы предоставить мне некоторые рекомендации // ссылку, как использовать с ENV. thakns – 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.

Затем вы можете собрать файл jar с помощью плагина sbt-assembly.

+0

Очень удобно управлять confiuraton с помощью библиотеки configafe config. Спасибо за это. Но я действительно хочу получить расположение файла файла из jar. http://stackoverflow.com/questions/941754/how-to-get-a-path-to-a-resource-in-a-java-jar-file. Возможно ли использование типов. Я не мог найти способ сделать это. @amirkarimi – John

+0

Как вы сказали, библиотека просто поддерживает абсолютный путь. Как получить ресурс как поток, а затем записать его в физический файл и указать путь к библиотеке? Тем не менее, это может иметь серьезные проблемы с безопасностью. –

+0

BTW, попробуйте следующее: Дайте это как credentialPath: 'ClassLoader.getSystemResource ("/resources/... "). ToURI()'. –

0

Аргумент --filesspark-submit или 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

Смежные вопросы