代码之家  ›  专栏  ›  技术社区  ›  Turo

spark数据集中的groupbykey,沿着聚合执行自定义逻辑

  •  0
  • Turo  · 技术社区  · 7 年前

    分组Spark数据集时是否可以执行自定义逻辑?这里的示例只是打印到控制台,但我希望将分组数据集(在实现了其他操作之后)保存到单独的文件中。在我的示例中,将“hey”打印到控制台不起作用。

    // import spark.implicits._
    
    case class Student(name: String, grade: String)
    
    val students = sc.parallelize(Seq(
      Student("John", "A"),
      Student("John", "B"),
      Student("Amy", "C")
    )).toDF().as[Student]
    
    def someFunc(key:String, values:Iterator[Student]): TraversableOnce[(String,Student)] = {
      println("Hey") // HOW TO GET THIS DONE ?
     return values.map(x => (key, x))
    }
    
    val groups = students.groupByKey(t => t.name).flatMapGroups(someFunc).show()
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   user9856051    7 年前

    在我的示例中,将“hey”打印到控制台不起作用。

    没有什么可以阻止您在闭包中执行任意*代码。但是,您不能期望看到stdout输出。请记住,此代码是在远程主机上执行的,而不是在本地计算机上执行的。

    如果要收集除累加器或任务更新以外的一些输出,请使用适当的日志记录和日志收集器。

    *只要它不使用分布式数据结构和Spark上下文。

    推荐文章