繁体   English   中英

等效于Apache Spark RDD中的getLines

[英]Equivalent to getLines in Apache Spark RDD

我有一个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给我提供了什么功能,例如inputDataArray[String]还是其他东西?

谢谢

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

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

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

所以textFile等同于fromFilegetLines ,并返回一个RDD,其中每个条目都是文件中的一行。 inputData等效于linesArray

RDD是一个分布式集合,因此从概念上讲它与List,Array或Seq并没有太大不同,它为您提供了可让您转换元素集合的功能操作。 与Scala集合的主要区别是固有分布的RDD。 给定一个Spark集群,当创建RDD时,它表示的集合将在该集群的某些节点上分区。

rdd.textFile(...)返回RDD[String] 给定一个分布式文件系统,每个工作人员会将一个文件或那个文件加载到一个“分区”中,在此可以进行进一步的转换和操作(使用Spark术语)。

鉴于Spark API非常类似于Scala集合API,一旦有了RDD,对其进行功能转换就与使用Scala集合的操作非常相似。

因此,您的Scala程序可以轻松移植到Spark:

//val filename = Source.fromFile("file://...")
//val lines = filename.getLines
val rdd = sc.textFile("file://...")

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

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

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

一个重要的区别是没有关联的“地图”集合作为RDD。 因此, mappedUsers是元组的集合(String, Map[String,String])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM