我正在尝试执行火花字计数程序。我的输入文件和输出目录位于本地而不是HDFS上。当我执行代码时,输入目录未找到异常。
import org.apache.spark.SparkConf
import org.apache.spark.sql.SparkSession
object WordCount {
val sparkConf = new SparkConf()
def main(args: Array[String]): Unit = {
val spark = SparkSession.builder().config(sparkConf).master("yarn").getOrCreate()
val input = args(0)
val output = args(1)
val text = spark.sparkContext.textFile("input",1)
val outPath = text.flatMap(line => line.split(" "))
val words = outPath.map(w => (w,1))
val wc = words.reduceByKey((x,y)=>(x+y))
wc.saveAsTextFile("output")
}
}
火花提交:
spark-submit --class com.practice.WordCount sparkwordcount_2.11-0.1.jar --files home/hmusr/ReconTest/inputdir/sample /home/hmusr/ReconTest/inputdir/wordout
我正在使用选项--files
来获取本地输入文件,并将输出指向spark-submit中的输出目录。当我使用spark-submit提交jar时,它说输入路径不存在:
Exception in thread "main" org.apache.hadoop.mapred.InvalidInputException: Input path does not exist: hdfs://dev/user/hmusr/input
任何人都可以让我知道我在这里犯的错误吗?
答案 0 :(得分:3)
几件事:
val text = spark.sparkContext.textFile(input,1)
要使用变量,请删除双引号,input
而不是"input"
。
您期望输入和输出作为参数,因此在jar后面提交spark提交(不带--files),并将master用作local
。
另外,使用file://
使用本地文件。
您的spark-submit
应该类似于:
spark-submit --master local[2] \
--class com.practice.WordCount \
sparkwordcount_2.11-0.1.jar \
file:///home/hmusr/ReconTest/inputdir/sample \
file:///home/hmusr/ReconTest/inputdir/wordout