【问题标题】:How to load local file using sc.textFile in spark?如何在火花中使用 sc.textFile 加载本地文件?
【发布时间】:2017-05-11 09:12:36
【问题描述】:

我一直在尝试使用 sc.textFile()in spark 加载本地文件。

我已经阅读了[问题]:How to load local file in sc.textFile, instead of HDFS

我在 Centos 7.0 上的 /home/spark/data.txt 中有本地文件

当我使用val data = sc.textFile("file:///home/spark/data.txt").collect 时,出现如下错误。

16/12/27 12:15:56 WARN TaskSetManager: Lost task 0.0 in stage 5.0 (TID 36,): java.io.FileNotFoundException: 文件 file:/home/spark/data.txt 没有 存在 在 org.apache.hadoop.fs.RawLocalFileSystem.deprecatedGetFileStatus(RawLocalFileSystem.java:609) 在 org.apache.hadoop.fs.RawLocalFileSystem.getFileLinkStatusInternal(RawLocalFileSystem.java:822) 在 org.apache.hadoop.fs.RawLocalFileSystem.getFileStatus(RawLocalFileSystem.java:599) 在 org.apache.hadoop.fs.FilterFileSystem.getFileStatus(FilterFileSystem.java:421) 在 org.apache.hadoop.fs.ChecksumFileSystem$ChecksumFSInputChecker.(ChecksumFileSystem.java:140) 在 org.apache.hadoop.fs.ChecksumFileSystem.open(ChecksumFileSystem.java:341) 在 org.apache.hadoop.fs.FileSystem.open(FileSystem.java:767) 在 org.apache.hadoop.mapred.LineRecordReader.(LineRecordReader.java:109) 在 org.apache.hadoop.mapred.TextInputFormat.getRecordReader(TextInputFormat.java:67) 在 org.apache.spark.rdd.HadoopRDD$$anon$1.(HadoopRDD.scala:246) 在 org.apache.spark.rdd.HadoopRDD.compute(HadoopRDD.scala:209) 在 org.apache.spark.rdd.HadoopRDD.compute(HadoopRDD.scala:102) 在 org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:319) 在 org.apache.spark.rdd.RDD.iterator(RDD.scala:283) 在 org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:38) 在 org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:319) 在 org.apache.spark.rdd.RDD.iterator(RDD.scala:283) 在 org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:70) 在 org.apache.spark.scheduler.Task.run(Task.scala:85) 在 org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:27​​4) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 在 java.lang.Thread.run(Thread.java:745)

16/12/27 12:15:56 错误 TaskSetManager: 阶段 5.0 中的任务 0 失败 4 次;中止作业 org.apache.spark.SparkException:作业中止到期 到阶段失败:阶段 5.0 中的任务 0 失败了 4 次,最近一次 失败:在阶段 5.0 (TID 42) 中丢失任务 0.3: java.io.FileNotFoundException:文件文件:/home/spark/data.txt 不存在 在 org.apache.hadoop.fs.RawLocalFileSystem.deprecatedGetFileStatus(RawLocalFileSystem.java:609) 在 org.apache.hadoop.fs.RawLocalFileSystem.getFileLinkStatusInternal(RawLocalFileSystem.java:822) 在 org.apache.hadoop.fs.RawLocalFileSystem.getFileStatus(RawLocalFileSystem.java:599) 在 org.apache.hadoop.fs.FilterFileSystem.getFileStatus(FilterFileSystem.java:421) 在 org.apache.hadoop.fs.ChecksumFileSystem$ChecksumFSInputChecker.(ChecksumFileSystem.java:140) 在 org.apache.hadoop.fs.ChecksumFileSystem.open(ChecksumFileSystem.java:341) 在 org.apache.hadoop.fs.FileSystem.open(FileSystem.java:767) 在 org.apache.hadoop.mapred.LineRecordReader.(LineRecordReader.java:109) 在 org.apache.hadoop.mapred.TextInputFormat.getRecordReader(TextInputFormat.java:67) 在 org.apache.spark.rdd.HadoopRDD$$anon$1.(HadoopRDD.scala:246) 在 org.apache.spark.rdd.HadoopRDD.compute(HadoopRDD.scala:209) 在 org.apache.spark.rdd.HadoopRDD.compute(HadoopRDD.scala:102) 在 org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:319) 在 org.apache.spark.rdd.RDD.iterator(RDD.scala:283) 在 org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:38) 在 org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:319) 在 org.apache.spark.rdd.RDD.iterator(RDD.scala:283) 在 org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:70) 在 org.apache.spark.scheduler.Task.run(Task.scala:85) 在 org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:27​​4) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 在 java.lang.Thread.run(Thread.java:745)

驱动程序堆栈跟踪:在 org.apache.spark.scheduler.DAGScheduler.org$apache$spark$scheduler$DAGScheduler$$failJobAndIndependentStages(DAGScheduler.scala:1450) 在 org.apache.spark.scheduler.DAGScheduler$$anonfun$abortStage$1.apply(DAGScheduler.scala:1438) 在 org.apache.spark.scheduler.DAGScheduler$$anonfun$abortStage$1.apply(DAGScheduler.scala:1437) 在 scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:59) 在 scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:48) 在 org.apache.spark.scheduler.DAGScheduler.abortStage(DAGScheduler.scala:1437) 在 org.apache.spark.scheduler.DAGScheduler$$anonfun$handleTaskSetFailed$1.apply(DAGScheduler.scala:811) 在 org.apache.spark.scheduler.DAGScheduler$$anonfun$handleTaskSetFailed$1.apply(DAGScheduler.scala:811) 在 scala.Option.foreach(Option.scala:257) 在 org.apache.spark.scheduler.DAGScheduler.handleTaskSetFailed(DAGScheduler.scala:811) 在 org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.doOnReceive(DAGScheduler.scala:1659) 在 org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.onReceive(DAGScheduler.scala:1618) 在 org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.onReceive(DAGScheduler.scala:1607) 在 org.apache.spark.util.EventLoop$$anon$1.run(EventLoop.scala:48)
在 org.apache.spark.scheduler.DAGScheduler.runJob(DAGScheduler.scala:632) 在 org.apache.spark.SparkContext.runJob(SparkContext.scala:1871) 在 org.apache.spark.SparkContext.runJob(SparkContext.scala:1884) 在 org.apache.spark.SparkContext.runJob(SparkContext.scala:1897) 在 org.apache.spark.SparkContext.runJob(SparkContext.scala:1911) 在 org.apache.spark.rdd.RDD$$anonfun$collect$1.apply(RDD.scala:893) 在 org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:151) 在 org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:112) 在 org.apache.spark.rdd.RDD.withScope(RDD.scala:358) 在 org.apache.spark.rdd.RDD.collect(RDD.scala:892) ... 48 已删除 作者:java.io.FileNotFoundException:文件文件:/home/spark/data.txt 不存在 在 org.apache.hadoop.fs.RawLocalFileSystem.deprecatedGetFileStatus(RawLocalFileSystem.java:609) 在 org.apache.hadoop.fs.RawLocalFileSystem.getFileLinkStatusInternal(RawLocalFileSystem.java:822) 在 org.apache.hadoop.fs.RawLocalFileSystem.getFileStatus(RawLocalFileSystem.java:599) 在 org.apache.hadoop.fs.FilterFileSystem.getFileStatus(FilterFileSystem.java:421) 在 org.apache.hadoop.fs.ChecksumFileSystem$ChecksumFSInputChecker.(ChecksumFileSystem.java:140) 在 org.apache.hadoop.fs.ChecksumFileSystem.open(ChecksumFileSystem.java:341) 在 org.apache.hadoop.fs.FileSystem.open(FileSystem.java:767) 在 org.apache.hadoop.mapred.LineRecordReader.(LineRecordReader.java:109) 在 org.apache.hadoop.mapred.TextInputFormat.getRecordReader(TextInputFormat.java:67) 在 org.apache.spark.rdd.HadoopRDD$$anon$1.(HadoopRDD.scala:246) 在 org.apache.spark.rdd.HadoopRDD.compute(HadoopRDD.scala:209) 在 org.apache.spark.rdd.HadoopRDD.compute(HadoopRDD.scala:102) 在 org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:319) 在 org.apache.spark.rdd.RDD.iterator(RDD.scala:283) 在 org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:38) 在 org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:319)
在 org.apache.spark.rdd.RDD.iterator(RDD.scala:283) 在 org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:70)
在 org.apache.spark.scheduler.Task.run(Task.scala:85) 在 org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:27​​4) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 在 java.lang.Thread.run(Thread.java:745)

显然这个路径中有一个文件。如果我使用了错误的路径,那么错误如下所示。

 val data = sc.textFile("file:///data.txt").collect

org.apache.hadoop.mapred.InvalidInputException:输入路径不 存在:文件:/data.txt 在 org.apache.hadoop.mapred.FileInputFormat.singleThreadedListStatus(FileInputFormat.java:287) 在 org.apache.hadoop.mapred.FileInputFormat.listStatus(FileInputFormat.java:229) 在 org.apache.hadoop.mapred.FileInputFormat.getSplits(FileInputFormat.java:315) 在 org.apache.spark.rdd.HadoopRDD.getPartitions(HadoopRDD.scala:200)
在 org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:248) 在 org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:246) 在 scala.Option.getOrElse(Option.scala:121) 在 org.apache.spark.rdd.RDD.partitions(RDD.scala:246) 在 org.apache.spark.rdd.MapPartitionsRDD.getPartitions(MapPartitionsRDD.scala:35) 在 org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:248) 在 org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:246) 在 scala.Option.getOrElse(Option.scala:121) 在 org.apache.spark.rdd.RDD.partitions(RDD.scala:246) 在 org.apache.spark.SparkContext.runJob(SparkContext.scala:1911) 在 org.apache.spark.rdd.RDD$$anonfun$collect$1.apply(RDD.scala:893) 在 org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:151) 在 org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:112) 在 org.apache.spark.rdd.RDD.withScope(RDD.scala:358) 在 org.apache.spark.rdd.RDD.collect(RDD.scala:892)

我不知道为什么它不起作用。

有什么想法吗?

【问题讨论】:

  • 我陷入了一个类似的问题,并且在过去 2 小时内一直在敲我的头。我的本地 unix 目录上有一个文件,并且 spark 在不同的机器上运行。我也收到了一个找不到文件的异常。
  • 很抱歉我帮不了你。我也一直收到文件未找到异常。
  • 我发现的一件事是,如果您的 spark 服务器和文件所在的服务器不同,那么您不能直接使用sc.textFile。您必须先将文件放入 hdfs 然后才能使用它。我刚试过,它奏效了。
  • 很好!我已经将文件放入 hdfs 但它不起作用......

标签: scala file apache-spark


【解决方案1】:

使用这个val data = sc.textFile("/home/spark/data.txt") 这应该可以 并将master设置为本地。

【讨论】:

  • 感谢您的回复。我通常使用 HDFS,但有时我必须加载本地文件。所以我尝试使用file:///PATH来加载本地文件。
  • 答案是否定的。如果我只使用sc.textFile() 而不使用file:///,它就不起作用。因为默认路径是设置HDFS。
  • file:/// 只有在集群中运行时才能工作。从本地机器将master设置为本地访问文件,然后运行。
  • 感谢您的回复!我会试试看!祝你有美好的一天~
【解决方案2】:

将该文件复制到您的 $SPARK_HOME 文件夹并使用以下命令:val data = sc.textFile("data.txt").collect

【讨论】:

    【解决方案3】:

    您的数据文件需要存在于所有执行程序节点上的“home/spark/data.txt”中。我知道这有点荒谬。要修复它,您有以下选择:

    1. 将数据文件移动到 HDFS
    2. 在所有执行器节点上复制数据文件
    3. 在纯 Scala(不是 Spark)中加载文件,然后使用 sc.parallelize() 创建 RDD。

    【讨论】:

      【解决方案4】:

      问题是我们的本地与火花本地不同。因此,当您运行 pyspark 时,必须提及您的代码必须在本地机器上运行,尤其是在您使用 AWS EC2 时。所以简单地运行 ./pyspark --master 本地 [n] 之后你的本地和火花本地将是一样的..... 不要忘记使用(file:///....)

      【讨论】:

        猜你喜欢
        • 2017-01-25
        • 2023-04-09
        • 2015-02-02
        • 1970-01-01
        • 1970-01-01
        • 2016-01-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多