相当于Apache Spark RDD中的getLines

时间:2014-12-10 18:30:44

标签: scala apache-spark

我有一个Scala程序,可以在一台计算机上正常运行。但是,我想让它在多个节点上运行。

程序的开头如下:

val filename = Source.fromFile("file://...")

val lines = filename.getLines

val linesArray = lines.map(x => x.split("   ").slice(0, 3))

val mapAsStrings = linesArray.toList.groupBy(_(0)).mapValues(x => x.map(_.tail))

val mappedUsers = mapAsStrings map {case (k,v) => k -> v.map(x => x(0) -> x(1).toInt).toMap}

当尝试使用Spark运行程序时,我知道我需要一个SparkContextSparkConf对象,并且它们用于创建RDD

所以现在我有:

class myApp(filePath: String) {

private val conf = new SparkConf().setAppName("myApp")
private val sc = new SparkContext(conf)
private val inputData = sc.textFile(filePath)

inputData现在是RDD,它与之前的程序相同,是filename(我假设)。对于RDD,方法是不同的。那么,相当于getLines的是什么?或者没有相应的?我很难想象RDD让我使用的内容,例如是inputData还是Array[String]还是其他什么?

由于

1 个答案:

答案 0 :(得分:3)

documentation似乎直接回答了这个问题:

def textFile(path: String, minPartitions: Int = defaultMinPartitions): RDD[String] 
  

从HDFS读取文本文件,本地文件系统(在所有节点上都可用)或任何支持Hadoop的文件系统URI,并将其作为字符串的RDD返回。

因此textFile相当于fromFilegetLines,并返回RDD,其中每个条目都是文件中的一行。 inputData相当于linesArray