如何处理spark中的大文本文件?
How to handle large text file in spark?
我有一个很大的文本文件 (3 GB),它是 DNA 参考。我想把它分成几部分,这样我就可以处理它。
所以我想知道如何使用Spark对文件进行切片。我目前只有一个 4 GB 内存的节点
听起来您想将文件加载为多个分区。如果您的文件是可拆分的(文本文件、snappy、序列等),您可以简单地提供将加载文件的分区数 sc.textFile(inputPath, numPartitions)
。如果你的文件是不可分割的,它会被加载为一个分区,但是你可以在加载的 RDD 上调用 .repartition(numPartitions)
来重新分区成多个分区。
如果你想在每个块中有特定数量的行,你可以试试这个:
rdd=sc.textFile(inputPath).zipWithIndex()
rdd2=rdd.filter(x=>lowest_no_of_line<=x._2 & x._2<=highest_no_of_line).map(x=>x._1).coalesce(1,false)
rdd2.saveAsTextFile(outputpath)
现在您保存的文本文件将包含 highest_no_of_line
和 lowest_no_of_line
之间的行
我有一个很大的文本文件 (3 GB),它是 DNA 参考。我想把它分成几部分,这样我就可以处理它。
所以我想知道如何使用Spark对文件进行切片。我目前只有一个 4 GB 内存的节点
听起来您想将文件加载为多个分区。如果您的文件是可拆分的(文本文件、snappy、序列等),您可以简单地提供将加载文件的分区数 sc.textFile(inputPath, numPartitions)
。如果你的文件是不可分割的,它会被加载为一个分区,但是你可以在加载的 RDD 上调用 .repartition(numPartitions)
来重新分区成多个分区。
如果你想在每个块中有特定数量的行,你可以试试这个:
rdd=sc.textFile(inputPath).zipWithIndex()
rdd2=rdd.filter(x=>lowest_no_of_line<=x._2 & x._2<=highest_no_of_line).map(x=>x._1).coalesce(1,false)
rdd2.saveAsTextFile(outputpath)
现在您保存的文本文件将包含 highest_no_of_line
和 lowest_no_of_line