如何在spark scala数据框中按行迭代遍历行?

时间:2018-01-12 03:36:08

标签: scala apache-spark dataframe

我有一个包含以下列的数据框,df1

Following the example there:
Project_end_date               I_date     Project_start_date  id
Jan 30 2017            Jan 10 2017            Jan 1 2017      1
Jan 30 2017            Jan 15 2017            Jan 1  2017     1
Jan 30 2017            Jan 20 2017            Jan 1 2017      1

在这里,您可以找到i和开始日期之间的差异,即10天,15天和20天。然后你会把它们表示为项目持续时间的百分比,所以100 * 10/30 = 33%,100 * 15/30 = 50%,100 * 20/20 = 67%。然后你会得到这些的平均值(33%),最小值(33%),最大值(67%)等。

如何在ID

上进行分组后实现此目的

df.groupby( “ID”)。 ?

1 个答案:

答案 0 :(得分:1)

最简单的方法是在groupBy

之前添加您关注的值
import org.apache.spark.sql.{functions => F}
import spark.implicits._

df.withColumn("ival", (
    $"I_date" - $"Project_start_date") /
    ($"Project_end_date" - $"Project_start_date"))
    .groupBy('id').agg(
        F.min($"ival").as("min"),
        F.max($"ival").as("max"),
        F.avg($"ival").as("avg")
    )

如果您想避开withColumn,可以在ivalF.minF.max内获取F.avg的表达式更冗长。