预加载脚本并在spark-shell中解析`args`

时间:2019-02-06 15:12:03

标签: scala apache-spark

我有一个测试脚本来读取作为参数提供的文本文件,如下所示:

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(",")

2 个答案:

答案 0 :(得分:0)

您可以将自定义--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"

答案 1 :(得分:0)

这对我有用

import scala.io.Source

val sqlContext = new org.apache.spark.sql.SQLContext(sc)

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

println(args)

args