加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 相当于Apache Spark RDD中的getLines

发布时间:2020-12-16 18:39:07 所属栏目:安全 来源:网络整理
导读:我有一个 Scala程序,可以在一台计算机上正常工作.但是,我想让它在多个节点上工作. 程序的开头看起来像这样: val filename = Source.fromFile("file://...")val lines = filename.getLinesval linesArray = lines.map(x = x.split(" ").slice(0,3))val mapAs
我有一个 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]还是别的什么?

谢谢

解决方法

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}

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读