是否可以在对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()
答案 0 :(得分:2)
在我的例子中,打印"嘿"到控制台不起作用。
没有任何东西阻止你在闭包中执行任意*代码。但是你不能期望看到stdout输出。请记住,此代码在远程主机上执行,而不是在本地计算机上执行。
如果要收集除累加器或任务更新之外的一些输出,请使用正确的日志记录和日志收集器。
*只要它不使用分布式数据结构和Spark上下文。