Spark数据集中的groupByKey,沿聚合

时间:2018-05-27 20:53:50

标签: scala apache-spark

是否可以在对Spark数据集进行分组时执行自定义逻辑?这里只是打印到控制台的示例,但我想例如将分组数据集(在实施其他操作之后)保存为单独的文件。在我的例子中,打印"嘿"到控制台不起作用。

// 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 个答案:

答案 0 :(得分:2)

  

在我的例子中,打印"嘿"到控制台不起作用。

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

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

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