Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 按排序顺序将RDD收集到一个节点_Apache Spark - Fatal编程技术网

Apache spark 按排序顺序将RDD收集到一个节点

Apache spark 按排序顺序将RDD收集到一个节点,apache-spark,Apache Spark,我有一个大的RDD,它需要写入磁盘上的单个文件,每个元素一行,这些行按照定义的顺序排序。因此,我考虑对RDD进行排序,在驱动程序中一次收集一个分区,然后附加到输出文件中 两个问题: 在rdd.sortBy()之后,我是否可以保证分区0将包含已排序rdd的第一个元素,分区1将包含已排序rdd的下一个元素,依此类推?(我正在使用默认的分区器。) e、 g 您不能使用saveAsTextFile而不是自己循环和追加吗?saveAsTextFile生成的输出文件数量与分区数量相同。顺便说一句,你的文件

我有一个大的RDD,它需要写入磁盘上的单个文件,每个元素一行,这些行按照定义的顺序排序。因此,我考虑对RDD进行排序,在驱动程序中一次收集一个分区,然后附加到输出文件中

两个问题:

  • rdd.sortBy()之后,我是否可以保证分区0将包含已排序rdd的第一个元素,分区1将包含已排序rdd的下一个元素,依此类推?(我正在使用默认的分区器。)
    e、 g


  • 您不能使用
    saveAsTextFile
    而不是自己循环和追加吗?
    saveAsTextFile
    生成的输出文件数量与分区数量相同。顺便说一句,你的文件有多大?比任何节点的内存都大。你不能使用
    saveAsTextFile
    而不是自己循环和追加吗?
    saveAsTextFile
    生成的输出文件与分区的数量一样多。顺便说一句,你的文件有多大?比任何节点的内存都大。
    val rdd = ???
    val sortedRdd = rdd.sortBy(???)
    for (p <- sortedRdd.partitions) {
      val index = p.index
      val partitionRdd = sortedRdd mapPartitionsWithIndex { case (i, values) => if (i == index) values else Iterator() }
      val partition = partitionRdd.collect()
      partition foreach { e =>
        // Append element e to file
      }
    }
    
    val rdd = ???
    val sortedRdd = rdd.sortBy(???)
    for (e <- sortedRdd.toLocalIterator) {
      // Append element e to file
    }