簡體   English   中英

Spark使用wholeTextFiles獲取行號zipWithIndex

[英]Spark getting line number zipWithIndex with wholeTextFiles

我有一個用例,我必須使用 wholeTextFiles 讀取文件。 但是,我需要在文件中生成行號。 如果我使用:

val file=sc.wholeTextFiles("path").zipWithIndex

我得到每個文件一個行號。 如何為每個文件獲取每行的行號?

一種簡單的方法是使用帶有 function 的flatMap來展平加載的 RDD,該 function 為每個文本文件逐行添加行號,如下所示:

import org.apache.spark.sql.Row

val rdd = sc.wholeTextFiles("/path/to/textfiles").
  flatMap{ case (fName, lines) =>
    lines.split("\\n").zipWithIndex.map{ case (line, idx) => (fName, idx, line) }
  }
// rdd: org.apache.spark.rdd.RDD[(String, Int, String)] = ...

Collect RDD 應該會產生如下結果:

rdd.collect
// res1: Array[(String, Int, String)] = Array(
//   ("/path/to/file1", 0, "text line 1 in file1"),
//   ("/path/to/file1", 1, "text line 2 in file1"),
//   ("/path/to/file1", 2, "text line 3 in file1"),
//       ...
//   ("/path/to/file2", 0, "text line 1 in file2"),
//   ("/path/to/file2", 1, "text line 2 in file2"),
//       ...
//       ...
// )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM