Scala Spark 2.0从foreach创建数据帧

Scala Spark 2.0从foreach创建数据帧,scala,dataframe,apache-spark-sql,Scala,Dataframe,Apache Spark Sql,可以在数据帧上执行foreach以便返回数据集吗?我有一个要求,只能通过按顺序处理记录来满足,因此我在数据帧上使用foreach,但我需要根据结果创建一个新的数据集,以便将其写入拼花地板输出文件。这段伪代码是我想要完成的: dataframe.foreachPartition( it => { /// process records . . . /// write the results form this partition into a file for aggregati

可以在数据帧上执行foreach以便返回数据集吗?我有一个要求,只能通过按顺序处理记录来满足,因此我在数据帧上使用foreach,但我需要根据结果创建一个新的数据集,以便将其写入拼花地板输出文件。这段伪代码是我想要完成的:

dataframe.foreachPartition(
  it => {
  /// process records . . .
  /// write the results form this partition into a file for aggregation later
      sparkSession.write . . .
  }
);
// read a dataframe containing all the data sets written by the tasks
sparkSession.read . . .

我知道这是相当稀疏的,但这总结了我需要做什么。foreach内部不允许调用sparkSession.write,因此我想知道是否还有其他方法。

实际上,您无法访问foreachPartition中的数据帧或数据集,这是因为数据集和数据帧以及其他spark实体作为会话,只能从驱动程序代码中获得

尽管一种替代方法是在foreachPartition中直接使用Hadoop API生成拼花地板文件,因为分区的数据是可访问的:

dfB.repartition(2).foreachPartition( iter => {
        iter.foreach(i => println(i))
    })
另一个深入描述此问题及其解决方案的线程


祝你好运

Hi@absmiths你在这方面的研究有什么进展吗?我最终使用了窗口函数。它们不是迭代行的直接替代品,但如果您将它们与数据帧正确对齐,它们将发挥很大作用并表现良好。