【问题标题】:Want to make output as an Object instead of println想要将输出作为对象而不是 println
【发布时间】:2016-09-24 11:39:40
【问题描述】:


我想创建一个对象而不是 println。

文本文件会像
“长野,苹果”
“长野,梨”
“德克萨斯州,葡萄柚”
“里约,番石榴”
“里约,番石榴”

结果像
“(长野,苹果,1)”
“(长野,梨,1)”
“(德克萨斯州,葡萄柚,1)”
“(里约,番石榴,2)”

def main(args: Array[String]) = {

    val conf = new SparkConf()
    .setAppName("WordCount")
    .setMaster("local")
    val sc = new SparkContext(conf)

    // read text info
    val textfile = sc.textFile("C:\\fruitbox.csv")
    twitter.filter(_.nonEmpty)
    val map = twitter.map { word => (word, 1) }
    .reduceByKey(_ + _)
    .foreach(println) // ← want to do something about this row
}

但我想让 println 结果变成这样

    .foreach(
        fruitbox.setCity(_.split(",")[0])
        fruitbox.setApple(_.split(",")[1])
        ...
    )

这似乎是简单的语法知识 但我想不通。

【问题讨论】:

    标签: scala apache-spark foreach


    【解决方案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 的内容时,请尝试明确说明您在每一步处理的类型,以便更轻松地编写代码来帮助您。

    【讨论】:

      【解决方案2】:

      感谢您的帮助 Chobeat!
      我修复了 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)
      })
      

      【讨论】:

        【解决方案3】:

        'list :+= (twitterinfo)' 是什么? 您不应使用可变状态,而应从“map”函数返回结果。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-08-06
          • 2011-01-20
          • 1970-01-01
          • 1970-01-01
          • 2015-04-24
          • 2017-12-21
          • 1970-01-01
          相关资源
          最近更新 更多