Предварительная загрузка скриптов и разбор `args` в spark-shell - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть тестовый скрипт для чтения текстового файла, представленного в виде параметра, подобного приведенному ниже:

test.scala:

$ cat test.scala
import scala.io.Source

val filename = args(0)
for (line <- Source.fromFile(filename).getLines) {
    println(line)
}

Я хочу прочитать текстовый файл ниже:

$ cat test.txt
test1
test2
test3

Мне нужно запустить scala в командной строке, как показано ниже:

spark-shell -i test.scala test.txt

Я ожидаю, что test.txt распознается как args(0), но я вижу вывод как:

: 26: ошибка: не найдена: значение args val filename = args (0)

Может кто-нибудь просветить меня, как правильно использовать это?Большое спасибо.

ОБНОВЛЕНИЕ:

cat test.scala
import scala.io.Source

val args = spark.sqlContext.getConf("spark.driver.args").split(",")
val filename = args(0)

for (line <- Source.fromFile(filename).getLines) {
    println(line)
}

Результат теста: spark-shell -i test.scala --conf spark.driver.args="test.txt"

 SQL context available as sqlContext. Loading test.scala... import
 scala.io.Source <console>:26: error: not found: value spark
          val args = spark.sqlContext.getConf("spark.driver.args").split(",")

1 Ответ

0 голосов
/ 06 февраля 2019

Вы можете передать свое пользовательское значение --conf аргументу в spark.Вот как вы можете передать свои аргументы:

import scala.io.Source

val args = spark.sqlContext.getConf("spark.driver.args").split(",")
val arg1 = args(0)
val arg2 = arg(1)
print(arg1)

В --conf я должен передать значение spark.driver.args аргументов.Таким образом, последняя команда для запуска скрипта будет:

spark-shell -i test.scala --conf spark.driver.args="param1value,param2value,param3value"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...