在火花数据框架中梳理行



如果我的输入如下:

SNO名称时间1你好11你好21 HAI 31 HAI 41 HAI 51如何61如何71是81是91如何101如何111是121是131是14

我想组合具有与下面输出格式的名称相似值的字段:

sno名称timestart timerEnd1你好1 21 HAI 3 51如何6 71是8 91如何10 111是12 14

将根据时间对输入进行排序,并且只能合并具有相同名称的记录。我正在尝试使用Spark进行使用,但是由于我是新手Spark,我无法找到一种使用Spark功能来执行此操作的方法。关于该方法的任何建议将不胜感激。

我试图考虑编写用户定义的功能并将地图应用于数据框架,但我无法为该功能提出正确的逻辑。

ps:我正在尝试使用Scala Spark进行此操作。

这样做的一种方法是使用普通的SQL查询。假设df是您的输入数据框。

val viewName = s"dataframe"
df.createOrReplaceTempView(viewName)
spark.sql(query(viewName))
def query(viewName: String): String = s"SELECT sno, name, MAX(time) AS timeend, MIN(time) AS timestart FROM $viewName GROUP BY name"

您当然可以使用DF集。这将是:

df.groupBy($"name")
  .agg($"sno", $"name", max($"time").as("timeend"), min($"time").as("timestart"))

最新更新