Apache 使用spark submit将数据写入文本文件不起作用

Apache 使用spark submit将数据写入文本文件不起作用,apache,scala,hadoop,Apache,Scala,Hadoop,我有一组数据,正在根据我的要求使用spark进行扩展。扩展的数据(在循环中运行)将被写入HDFS中的文本文件中,我在这样做时面临问题。只有前两条记录被写入,然后就失败了 下面是我用来处理和写入文本文件的代码: def Hdfswrite(record:String) { //val timestamp = new java.text.SimpleDateFormat("yyyyMMdd-HH").format(new java.util.Da

我有一组数据,正在根据我的要求使用spark进行扩展。扩展的数据(在循环中运行)将被写入HDFS中的文本文件中,我在这样做时面临问题。只有前两条记录被写入,然后就失败了

下面是我用来处理和写入文本文件的代码:



         def Hdfswrite(record:String)
        {
        //val timestamp = new java.text.SimpleDateFormat("yyyyMMdd-HH").format(new java.util.Date())
        val file = "/user/bhkp/sparkoutput6/sparkoutput12" + ".txt"
        val line = "\n" + record
        val config = new Configuration()
        val fs = FileSystem.get(config)
try
        {
        val writer = fs.append(new Path(file))
        writer.write(line.getBytes)
        writer.close
        }
        catch
        {
          case t: Throwable => { val writer = fs.create(new Path(file))
          writer.write(line.getBytes)
          writer.close
          }
        }
        }
  def main(args: Array[String]){
    val tokenized = sc.textFile("/user/bhkp/hv_tables/sparktestdata12.txt").map(rec => (rec.split("\\^",-1)))
    tokenize.foreach(transfer)

  }
我得到以下错误: org.apache.hadoop.ipc.RemoteException(java.io.FileNotFoundException):ID不匹配。请求id和保存的id。

我不确定问题发生在何处,因为在输入文件只有2条记录时写入数据,但在记录计数为3条或更多时开始失败

当我尝试打印输出时,它工作得非常好


我很困惑。

你能说得更清楚些吗。这就是你正在运行的代码吗??什么是传递函数?。其“tokenized”在“tokenize.foreach(transfer)”中的传递函数用于扩展数据。它循环遍历一个文件,获取每一行数据并进行处理,工作正常。每次循环完成后,我都会调用Hdfswrite函数来写入记录。Hdfswrite(record)。上述代码用于将其写入文本文件。打开和关闭每个记录上的文件是一个非常糟糕的主意,并且必须至少失败一次才能在CATCH中创建文件,这是一个非常错误的主意。请记住,spark并行运行多个任务,其中哪一个将第一次创建文件?如果两个或多个任务同时尝试创建文件,会发生什么情况?请查看Spark API,避免编写自己的编写器。您可以在RDD上使用flatMap来扩展记录,并保存ASTEXTFILE来写入输出。您可以更清楚地了解。这就是你正在运行的代码吗??什么是传递函数?。其“tokenized”在“tokenize.foreach(transfer)”中的传递函数用于扩展数据。它循环遍历一个文件,获取每一行数据并进行处理,工作正常。每次循环完成后,我都会调用Hdfswrite函数来写入记录。Hdfswrite(record)。上述代码用于将其写入文本文件。打开和关闭每个记录上的文件是一个非常糟糕的主意,并且必须至少失败一次才能在CATCH中创建文件,这是一个非常错误的主意。请记住,spark并行运行多个任务,其中哪一个将第一次创建文件?如果两个或多个任务同时尝试创建文件,会发生什么情况?请查看Spark API,避免编写自己的编写器。您可以在RDD上使用flatMap来扩展记录,并保存ASTEXTFILE来写入输出