【问题标题】:groupByKey in Spark dataset, execute custom logic along the aggregationSpark数据集中的groupByKey,沿着聚合执行自定义逻辑
【发布时间】:2018-05-28 12:02:57
【问题描述】:

是否可以在对 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()

【问题讨论】:

    标签: scala apache-spark


    【解决方案1】:

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

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

    如果您想收集一些输出,而不是累加器或任务更新,请使用适当的日志记录和日志收集器。

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

    【讨论】:

      猜你喜欢
      • 2017-07-06
      • 2016-10-09
      • 2017-04-25
      • 1970-01-01
      • 2019-02-13
      • 2021-01-04
      • 1970-01-01
      • 2018-03-31
      • 1970-01-01
      相关资源
      最近更新 更多