【问题标题】:Would zipWithIndex after sc.textFile give the correct line numbers?sc.textFile 之后的 zipWithIndex 会给出正确的行号吗?
【发布时间】:2017-04-15 08:46:02
【问题描述】:

Say If I do,如下所示。

val rdd = sc.textFile("someFile.txt")
val rddWithLines = rdd.zipWithIndex

zipWithIndex 添加的索引是否与输入文件中的行号(第一行当然是 0)相对应?还是在这种情况下订单被破坏了?

【问题讨论】:

  • 应该可以:“例如,如果您读取文件 (sc.textFile),RDD 的行将按照它们在文件中的顺序排列。”来自this answer

标签: scala apache-spark


【解决方案1】:

SparkContext.textFile 可以为每个文件创建多个分区。如果这些分区的顺序正确,您应该得到正确的结果。请参阅this answer 了解更多信息。

【讨论】:

  • 这个答案不正确。 zipWithIndex 完全符合 OP 的要求,无论分区如何。
  • 我同意,只要分区顺序正确。
  • 它们怎么会出现故障?有序分区是sc.textFile 使用的HadoopRDD 类的保证。
  • @TimP 即使通过 sc.textFile 读取多个文件,也会保留顺序吗?
  • sc.textFile 加载多个文本文件就像用sc.textFile 分别加载每个文件并合并结果一样。每个文件的分区将被排序。
【解决方案2】:

zipWithIndex 是仅映射转换(它不会随机播放),因此顺序将是正确的。您可以在这里安全地使用它。

【讨论】:

    猜你喜欢
    • 2012-11-17
    • 2023-01-01
    • 2017-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-08
    相关资源
    最近更新 更多