我有表1
number type time
--------------------
1 on 1
1 on 5
1 off 10
1 off 15
我需要将其转换为表2
number type time
--------------------
1 on 1
1 off 2
1 on 5
1 off 10
1 on 14
1 off 15
条件是如果<code>$“类型”===“打开”
我找到了应该复制的行
val window = Window.partitionBy($"number").orderBy($"time")
df
.withColumn("lag_type", lag($"type", 1, null).over(window))
.withColumn("lag1", $"type" === "ON" && $"lag_type" =!= "OFF")
.withColumn("lag2", $"type" =!= "ON" && $"lag_type" === "OFF")
但不知道如何添加行。特别是如果它们基于滞后值。对于当前的一个,我可能会列出列表
type time
(on, off) (14, 15)
并像在这里展示的那样爆炸它们,但是当涉及到滞后行时,我又迷失了。
有什么建议吗?我正在使用火花2.2。案例类可以吗?
如果我正确理解了您的问题,那么您只想为以下情况添加行:lag1
或lag2
为true
。
一种方法是:
//Filter only the rows that needs to be changed :
val df2 = df.withColumn("lag_type", lag($"type", 1, null).over(window))
.withColumn("lag1", $"type" === "ON" && $"lag_type" =!= "OFF")
.withColumn("lag2", $"type" =!= "ON" && $"lag_type" === "OFF")
.filter( $"lag1"|| $"lag2")
//Change the rows based on the values of lag1 and lag2
//then drop extra columns
val newChangedDf = df2
.withColumn("time",when($"lag1", $"time"+1).otherwise($"time"-1))
.withColumn("type",when($"lag1", lit("OFF")).otherwise(lit("ON")))
.drop("lag_type","lag1","lag2")
//Finally add them to the original df.
val finalDf = df.union(newChangedDf)
注意:这不处理lag1和lag2都< code>true的情况。请根据您的要求操作上述代码。
我想将当前行复制到它下面的新行。我找到了这篇文章,但在options>键盘中找不到他们谈论的选项()。 2017年我们如何做到这一点?
我们的应用程序使用Amazon RDS Aurora的reader和writer实例。AWS仪表板显示副本延迟持续约为20ms。然而,我们在阅读器上看到的旧结果是在主机上提交后90ms以上,在某些情况下至少高达170ms。 当执行CRUD操作时,我们的应用程序提交数据,然后向客户端发出HTTP重定向以加载新数据。重定向时的网络周转记录在客户端上,通常至少为90ms。我们正在记录应用服务器上的提交时
我是VSCode编辑器的新手。 以前使用atom时,将光标放在行尾并按Ctrl C键将复制该行。将光标放在另一行的末尾,然后按Ctrl V键将其粘贴到该行的下面。 似乎在VSCode中,我可以以相同的方式复制一行,但当我以相同的方式粘贴时,它会将该行放在所选行上方。当我的光标位于行尾时,这似乎非常违反直觉。 有什么地方可以改变这个的设置吗? 编辑:我没有试图复制一行。我想复制一行并粘贴到另一个文件
我想“创建或替换”postgres表的触发器。但是,没有这样的sql表达式。 我看到我可以先执行“
提前谢了。
问题内容: 伙计们,我想在mysql中使用解析函数滞后。在Oracle中受支持,但在Mysql中无法做到。那么有人可以帮助我如何在Mysql中执行滞后运算吗?例如 我想使用滞后函数,以便我的输出如下 Mysql支持滞后功能吗??? 问题答案: 您可以使用用户变量来模拟它: 看到它在工作sqlfiddle直播 在这里,您可以初始化变量。这与在编写查询之前编写内容相同。 那么这些语句在select子句