首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scala实践:列表和案例类

Scala实践:列表和案例类
EN

Stack Overflow用户
提问于 2015-07-10 17:45:53
回答 2查看 124关注 0票数 0

我刚刚开始使用Scala/Spark,并且来自Java背景,我仍然试图了解Scala的不可变概念和其他最佳实践。

这是一个来自较大程序的非常小的代码段:

交叉口是RDD(键,(字符串,字符串))

是(键,(串,串))

数据只是我前面定义的一个案例类。

代码语言:javascript
复制
val intersections = map1 join map2
var listOfDatas = List[Data]()
intersections take NumOutputs foreach (obs => {
  listOfDatas ::= ParseInformation(obs._1.key, obs._2._1, obs._2._2)
})

listOfDatas foreach println

这段代码可以工作,可以完成我需要做的事情,但我想知道是否有更好的方法来实现这一点。每次迭代时,我都使用变量列表并使用新列表重写它,而且我确信必须有更好的方法来创建一个不可变列表,该列表中填充了ParseInformation方法调用的结果。此外,我还记得在某个地方读到,与其像我这样直接访问元组值,不如在函数中使用case类(我认为它是部分函数?)提高可读性。

谢谢您的任何意见!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-10 17:53:03

这可能在本地起作用,但仅仅是因为您是在本地进行take。当listOfDatas作为副本传递给每个工作人员时,它将不再工作。海事组织这样做的更好办法是:

代码语言:javascript
复制
val processedData = intersections map{case (key, (item1, item2)) => {
  ParseInfo(key, item1, item2)
}}

processedData foreach println

对于一个新的函数式开发工具,请注意:如果您所要做的只是在可迭代(List)中转换数据,那么忘记foreach。相反,使用map,它运行对每个项的转换,并输出一个新的可迭代结果。

票数 4
EN

Stack Overflow用户

发布于 2015-07-10 17:51:42

intersections的类型是什么?看起来您可以用foreach替换map

代码语言:javascript
复制
val listOfDatas: List[Data] =
  intersections take NumOutputs map (obs => {
    ParseInformation(obs._1.key, obs._2._1, obs._2._2)
  })
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31347120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档