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)
})