Scala 要将输出作为对象而不是println吗

Scala 要将输出作为对象而不是println吗,scala,apache-spark,foreach,Scala,Apache Spark,Foreach,我想制作一个对象而不是println。 文本文件类似于 “长野,苹果” “长野梨” “德克萨斯州,葡萄柚” “里约番石榴” “里约热内卢,番石榴” 结果如下 “(长野,苹果,1)” “长野梨1号” “(德克萨斯州,葡萄柚,1)” (里约热内卢,番石榴,2) 但我想让println的结果是这样的 .foreach( fruitbox.setCity(_.split(",")[0]) fruitbox.setApple(_.split(",")[1])


我想制作一个对象而不是println。

文本文件类似于
“长野,苹果”
“长野梨”
“德克萨斯州,葡萄柚”
“里约番石榴”
“里约热内卢,番石榴”

结果如下
“(长野,苹果,1)”
“长野梨1号”
“(德克萨斯州,葡萄柚,1)”
(里约热内卢,番石榴,2)

但我想让println的结果是这样的

    .foreach(
        fruitbox.setCity(_.split(",")[0])
        fruitbox.setApple(_.split(",")[1])
        ...
    )
这似乎是简单的语法知识
但我无法理解这一点。

你需要从函数的角度来考虑它,否则你会发疯的。将
foreach
替换为具有以下形式功能的
map

.map(myInputTuple=>MyCaseClass(myInputTuple._0,myInputTuple._1,myInputTuple._2))
你知道案例课吗?如果不这样做,您应该看一看,并定义自己的来保存您处理的数据。否则,如果要构建已存在的具有setter的类的特定实例,可以通过以下方式进行:

.map(myInputTuple=>{
val myInstance = new myClass()
myInstance.setField1(myInputTuple._0)
...
myInstance
}
)
请注意括号:
{}
这些定义了一个范围,您可以在其中编写非功能性代码,该范围的最后一个值将是返回的值,在本例中是类的实例


此外,当您发布有关Spark的内容时,请尝试明确您在每个步骤中处理的类型,以便更容易编写代码来帮助您。

感谢您的帮助
我修复了foreach映射并添加了一些行 但是编译器跳过了它。
我错过什么了吗

val map = twitter.map { word => (word, 1) }
    .reduceByKey(_ + _)
    .map(obj => { // ← SKIPS FROM HERE
    var arg = obj._1.split(",")
    val twitterInfo = new TwitterInfo(arg.apply(0), arg.apply(1), obj._2)
    list:+=(twitterInfo)
})
什么是“列表:+=(推特信息)”? 您不应该使用可变状态,而是应该从“map”函数返回一个结果

另外,我在问题中注意到'twitter.filter'和'twitter.map'是两个不同的表达式,都使用'twitter'变量作为起点,这意味着没有使用'filter',您仍然映射空记录

val map = twitter.map { word => (word, 1) }
    .reduceByKey(_ + _)
    .map(obj => { // ← SKIPS FROM HERE
    var arg = obj._1.split(",")
    val twitterInfo = new TwitterInfo(arg.apply(0), arg.apply(1), obj._2)
    list:+=(twitterInfo)
})