Я пытаюсь запустить gsutil в Scala, но это не сработает, если я не введу явно код .cmd
в коде.Мне не нравится этот подход, так как другие, с которыми я работаю, используют системы Unix.Как мне дать Скале понять это gsutil == gsutil.cmd
?Я мог бы просто написать собственный сценарий оболочки и добавить его в путь, но я бы хотел решение, которое не включает сценарии.
Я уже пробовал с различными переменными среды (с использованием IntelliJ, не знаюесли это актуально).Я попытался добавить оба /bin
и /platform/gsutil
к пути, ни один не работает (по крайней мере, без .cmd).Я также попытался дать полный путь, чтобы увидеть, если он что-то изменил, это не так.
Вот метод, который использует gsutil:
def readFilesInBucket(ss: SparkSession, bucket: String): DataFrame = {
import ss.implicits._
ss.sparkContext.parallelize((s"gsutil ls -l $bucket" !!).split("\n")
.map(r => r.trim.split(" ")).filter(r => r.length == 3)
.map(r => (r(0), r(1), r(2)))).toDF(Array("Size", "Date", "File"): _*)
}
Это мой первый вопрос оИтак, я прошу прощения за любые ошибки форматирования, которые могут быть.
РЕДАКТИРОВАТЬ: обнаружил, что даже когда я пишу сценарий, как это:
exec gsutil.cmd "$@"
называется просто gsutil
в той же папке он выдает то же сообщение об ошибке, что и раньше: java.io.IOException: Cannot run program "gsutil": CreateProcess error=2, The system cannot find the file specified
.
Это работает, если я пишу gsutil
в git bash, что в противном случае не работало бы без скрипта.