Scala-Spark 不同的结果 [关闭]
Posted
技术标签:
【中文标题】Scala-Spark 不同的结果 [关闭]【英文标题】:Scala-Spark Different Results [closed] 【发布时间】:2018-01-26 12:39:54 【问题描述】:我正在尝试根据事件对我拥有的数据进行三元组,因此为此我使用DataFrames
。
val w = Window.partitionBy(args(1)).orderBy(args(2))
val lastDf = df.withColumn("OnePreviousEvent", lag(df(args(3)), 1).over(w))
.withColumn("twoPreviousEvent", lead(df(args(3)), 1).over(w))
.withColumn("new", concat_ws(",", $"OnePreviousEvent", col(event), $"twoPreviousEvent"))
.where($"twoPreviousEvent".isNotNull && $"OnePreviousEvent".isNotNull)
.groupBy("new").agg(count("new").alias("tripCount")).sort($"tripCount".desc)
我想问的是——每次我运行这段代码,我都会得到不同的结果。任何关于为什么会发生这种情况的想法将不胜感激。 谢谢
【问题讨论】:
【参考方案1】:这并没有什么奇怪的。让我们看一下您的代码示例,将args(1..3)
替换为x
, yand
z` 以便于分析:
val x: Column
val y: Column
val z: Column
val w = Window.partitionBy(x).orderBy(y)
val lastDf = df.withColumn("OnePreviousEvent", lag(z, 1).over(w))
.withColumn("twoPreviousEvent", lead(z), 1).over(w))
窗口使用y
排序,而您使用lag
或z
。如果z
中存在关联,则结果是不确定的。例如如果数据:
val df = Seq(
(1, 1, 1), (1, 1, 2), (1, 1, 3), (1, 1, 4)
).toDF("x", "y", "z")
那么有 24 种不同的可能排序:
(1, 2, 3, 4), (1, 2, 4, 3), (1, 3, 2, 4), (1, 3, 4, 2), ...
每个都满足PARTITION BY x
和ORDER BY y
。
当且仅当所有 y
值都是唯一的时,排序将是唯一且稳定的。
【讨论】:
以上是关于Scala-Spark 不同的结果 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
MFC .exe 和 .dll 为相同的代码产生不同的结果 [关闭]
scala - Spark:如何在 groupedData 中获取带有条件的结果集
如何在 php 中将“$_POST”返回到同一页面或不同的结果页面? [关闭]