代码之家  ›  专栏  ›  技术社区  ›  Marco99

apache spark:sparkfiles.get(filename.txt)-无法从sparkContext检索文件内容

  •  0
  • Marco99  · 技术社区  · 7 年前

    我用过 SparkContext.addFile("hdfs://host:54310/spark/fileName.txt") 并将文件添加到 SparkContext 是的。我用 org.apache.spark.SparkFiles.get(fileName.txt) 是的。它显示了一条绝对的道路 /tmp/spark-xxxx/userFiles-xxxx/fileName.txt 是的。

    现在我想 从上面给定的绝对路径读取该文件 起始位置 稀疏上下文 是的。我试过了 sc.textFile(org.apache.spark.SparkFiles.get("fileName.txt")).collect().foreach(println) 它认为 SparkFiles.get() 作为一个 高密度光纤 路径 ,这是不正确的。

    我找了很多有用的资料,但都没找到。

    这种做法有什么不对吗? 任何帮助都是非常感谢的。

    下面是代码和结果:

    scala> sc.addFile("hdfs://localhost:54310/spark/fileName.txt")
    
    scala> org.apache.spark.SparkFiles.get("fileName.txt")
    res23: String = /tmp/spark-3646b5fe-0a67-4a16-bd25-015cc73533cd/userFiles-a7d54640-fab2-4dfa-a94f-7de6f74a0764/fileName.txt
    
    scala> sc.textFile(org.apache.spark.SparkFiles.get("fileName.txt")).collect().foreach(println)
    org.apache.hadoop.mapred.InvalidInputException: Input path does not exist: hdfs://localhost:54310/tmp/spark-3646b5fe-0a67-4a16-bd25-015cc73533cd/userFiles-a7d54640-fab2-4dfa-a94f-7de6f74a0764/fileName.txt
      at org.apache.hadoop.mapred.FileInputFormat.singleThreadedListStatus(FileInputFormat.java:287)
      at org.apache.hadoop.mapred.FileInputFormat.listStatus(FileInputFormat.java:229)
      at org.apache.hadoop.mapred.FileInputFormat.getSplits(FileInputFormat.java:315)
      at org.apache.spark.rdd.HadoopRDD.getPartitions(HadoopRDD.scala:200)
      at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:253)
      at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:251)
      at scala.Option.getOrElse(Option.scala:121)
      at org.apache.spark.rdd.RDD.partitions(RDD.scala:251)
      at org.apache.spark.rdd.MapPartitionsRDD.getPartitions(MapPartitionsRDD.scala:35)
      at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:253)
      at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:251)
      at scala.Option.getOrElse(Option.scala:121)
      at org.apache.spark.rdd.RDD.partitions(RDD.scala:251)
      at org.apache.spark.SparkContext.runJob(SparkContext.scala:2092)
      at org.apache.spark.rdd.RDD$$anonfun$collect$1.apply(RDD.scala:939)
      at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:151)
      at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:112)
      at org.apache.spark.rdd.RDD.withScope(RDD.scala:363)
      at org.apache.spark.rdd.RDD.collect(RDD.scala:938)
      ... 49 elided
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   Sudev Ambadi Arun Kumar Giri    7 年前

    使用“file://”语法参考本地文件。

    sc.textFile("file://" + org.apache.spark.SparkFiles.get("fileName.txt"))
    .collect()
    .foreach(println)