我有一个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运行程序时,我知道我需要一个SparkContext
和SparkConf
对象,并且它们用于创建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]
还是其他什么?
由于
答案 0 :(得分:3)
documentation似乎直接回答了这个问题:
def textFile(path: String, minPartitions: Int = defaultMinPartitions): RDD[String]
从HDFS读取文本文件,本地文件系统(在所有节点上都可用)或任何支持Hadoop的文件系统URI,并将其作为字符串的RDD返回。
因此textFile
相当于fromFile
和getLines
,并返回RDD,其中每个条目都是文件中的一行。 inputData
相当于linesArray