我很难搞清楚为什么Spark没有访问我添加到上下文中的文件。下面是我在repl中的代码:
scala> sc.addFile("/home/ubuntu/my_demo/src/main/resources/feature_matrix.json")
scala> val featureFile = sc.textFile(SparkFiles.get("feature_matrix.json"))
featureFile: org.apache.spark.rdd.RDD[String] = /tmp/spark/ubuntu/spark-d7a13d92-2923-4a04-a9a5-ad93b3650167/feature_matrix.json MappedRDD[1] at textFile at <console>:60
scala> featureFile.first()
org.apache.hadoop.mapred.InvalidInputException: Input path does not exist: cfs://172.30.26.95/tmp/spark/ubuntu/spark-d7a13d92-2923-4a04-a9a5-ad93b3650167/feature_matrix.json
该文件实际上存在于/tmp/spark/ubuntu/spark-d7a13d92-2923-4a04-a9a5-ad93b3650167/feature_matrix.json
任何帮助表示感谢。
答案 0 :(得分:1)
如果您使用addFile
,则需要使用get
来检索它。此外,addFile
方法是懒惰的,因此在您实际调用first
之前,它很可能不会放在您找到它的位置,因此您正在创建此类圆圈。
所有这一切,我不知道使用SparkFiles
作为第一个动作永远是一个聪明的主意。使用--files
和SparkSubmit
之类的内容,文件将放在您的工作目录中。