Scala 在Spark中阅读CSV:有多少读者?

Scala 在Spark中阅读CSV:有多少读者?,scala,csv,apache-spark,Scala,Csv,Apache Spark,下面是“Learning Spark”一书的示例5.13,介绍如何在Scala中使用textFile()加载CSV。集群中将创建多少个CSVReaders和StringReaders?每行文字都有一个吗 import java.io.StringReader import au.com.bytecode.opencsv.CSVReader ... val input = sc.textFile(inputFile) val result = input.map{ line => val

下面是“Learning Spark”一书的示例5.13,介绍如何在Scala中使用
textFile()
加载CSV。集群中将创建多少个
CSVReader
s和
StringReader
s?每行文字都有一个吗

import java.io.StringReader
import au.com.bytecode.opencsv.CSVReader
...
val input = sc.textFile(inputFile)
val result = input.map{ line =>
  val reader = new CSVReader(new StringReader(line))
  reader.readNext()
}

查看Learning Spark的第107页,了解如何在每个分区的基础上工作。.mapPartition()方法将帮助您减少初始化操作的成本,例如创建解析器的实例

import au.com.bytecode.opencsv.CSVParser

val inputData = sc.textFile(inputFile).cache()
inputData.mapPartitions(lines => {
     val parser = new CSVParser(',')
     lines.map(line => {
       parser.parseLine(line).mkString(",")
     })
   })

每行处理的文本都有一个实例,但请注意,读取器的作用域仅限于传递给.map()方法的函数,因此它们将被垃圾收集soon@Max谢谢,你能把它变成一个答案吗?另外,你有没有看到一个不那么浪费的替代方案?即使读者很快就可以使用GC了,但似乎每一行都要做大量的工作。在本章前面,我们应该向您介绍mapPartitions,作为一种在不增加GC开销的情况下重用资源的方法。