Spark 数据框 1.6

Posted

技术标签:

【中文标题】Spark 数据框 1.6【英文标题】:Spark Data frame 1.6 【发布时间】:2018-11-13 18:13:50 【问题描述】:

数据转储

Work_Id,Assigned_to,Date,Status   
R1,John,3/4/15,Not Started   
R1,John,3/5/15,In Progress        
R1,John,3/6/15,Finished     
R3,Alaxender,3/7/15,In Progress   
R3,Alaxender,3/8/15,In Progress   
R4,Patrick,3/9/15,Finished   
R5,Peter,3/11/15,Finished   
R7,George,3/13/15,Not Started   
R7,George,3/14/15,In Progress   
R8,John,3/15/15,In Progress    
R8,John,3/16/15,In Progress   
R9,Alaxender,3/17/15,Not Started

最终输出

Work_Id,Assigned_to,Date,Status   
R1,John,3/6/15,Finished    
R7,George,3/14/15,In Progress    
R9,Alaxender,3/17/15,Not Started    
R3,Alaxender,3/7/15,In Progress    
R3,Alaxender,3/8/15,In Progress    
R4,Patrick,3/9/15,Finished    
R5,Peter,3/11/15,Finished    
R8,John,3/15/15,In Progress    
R8,John,3/16/15,In Progress 

有一个与上面相同的数据转储,其中包含工作订单。如果对同一个人有后续请求且状态为“未开始”,则最后一条记录(按日期排序)将合格。如果只有一条状态为“未开始”的记录,则该记录为合格。

例如:

R1,John,3/4/15,Not Started    
R1,John,3/5/15,In Progress   
R1,John,3/6/15,Finished   

此记录将合格

R1,John,3/6/15,Finished

对于同一个人,除了状态为“未开始”之外的所有记录都将在输出中合格。

任何帮助将不胜感激,使用 scala 在 Spark 1.6 数据帧中完成此操作。

【问题讨论】:

这与您发布的最后一个问题有什么不同,但您自己没有尝试解决问题? ***.com/questions/49472718/… ... idownvotedbecau.se/noattempt 感谢您对此的帮助.. @cricket_007,我们无法通过 collect_list 实现这一目标。完全需要一种不同的方法。 好吧,好吧,仍然......你能不能请edit 用一些 Scala 代码来回答你的问题? @cricket_007,我在这里更新了答案。有没有更好的方法来做到这一点? 【参考方案1】:

我有一个答案,但这目前降低了工作绩效。有没有更好的方法来做到这一点?

val df = myFile.toDF()

val dfFilter = df.filter($"status" === "Not Started")

val dfSelect = dfFilter.select(($"Assigned_to").alias("person"))

val dfInner = dfSelect.join(df, $"person" === $"Assigned_to")

val windowSpec = Window.partitionBy($"Assigned_to").orderBy(col("Date").desc)

val dfRank = dfInner.withColumn("rank", rank().over(windowSpec)).filter($"rank" === "1")

val dfDrop = dfRank.drop($"rank").drop($"person")

val dfLeftOuter = df.join(dfSelect, $"Assigned_to" === $"person", "leftouter")

val nullDf = dfLeftOuter.filter($"person".isNull).drop($"person")

nullDf.unionAll(dfDrop).show

【讨论】:

以上是关于Spark 数据框 1.6的主要内容,如果未能解决你的问题,请参考以下文章

Spark 1.6 数据帧缓存无法正常工作

Spark 1.6以空值爆炸[重复]

基于不同类型spark 1.6列的Spark join dataframe

窗口函数/scala/spark 1.6

带有浮点数 Spark 1.6 的 DataFrame 上的 SQL 百分位数 - 任何可能的解决方法? [复制]

Spark 1.6 scala 创建数据行