复制当前行或滞后行

     2023-04-17     210

关键词:

【中文标题】复制当前行或滞后行【英文标题】:dupicating current or lagging row 【发布时间】:2020-10-13 14:59:20 【问题描述】:

我有桌子 1

number  type   time
1       on     1
1       on     5
1       off    10
1       off    15

我需要把它转换成table2

number  type   time    
1       on     1
1       off    2
1       on     5
1       off    10
1       on     14
1       off    15

条件是如果$"type" === "ON" && $"lag_type" =!= "OFF" 我复制了 laggig 行,但将 type 替换为 OFF 并将 time 增加一秒。如果$"type" =!= "ON" && $"lag_type" === "OFF" 我复制当前行,但将类型替换为 ON 并将时间减少一秒。如果滞后类型为空,则跳过。

我找到了应该复制哪些行

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)

并像显示 here 一样展示它们,但是当谈到滞后行时,我再次迷失了。

有什么建议吗?我正在使用火花 2.2。案例类可以吗?

【问题讨论】:

如果您发现它有用,请也给答案投票:) @Eugene 【参考方案1】:

如果我正确理解您的问题,您只想在您发现 lag1lag2true 的情况下添加行。

一种方法:

//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 都是 true 的情况。请根据您的要求操作上述代码。

【讨论】:

idea快捷键

...的行(必备)Ctrl+X 剪切光标所在行或剪切选择内容Ctrl+C 复制光标所在行或复制选择内容Ctrl+D 复制光标所在行或复制选择内容,并把复制内容插入光标位置下面(必备)Ctrl+W 递进式选择代码块。可选中光标所在的单词 查看详情

idea常用快捷键

...中的行(必备)Ctrl+X剪切光标所在行或剪切选择内容Ctrl+C复制光标所在行或复制选择内容Ctrl+D复制光标所在行或复制选择内容,并把复制内容插入光标位置下面(必备)Ctrl+W递进式选择代码块。可选中光标所在的单词或段落,连... 查看详情

idea快捷键大全

...中的行(必备)Ctrl+X剪切光标所在行或剪切选择内容Ctrl+C复制光标所在行或复制选择内容Ctrl+D复制光标所在行或复制选择内容,并把复制内容插入光标位置下面(必备)Ctrl+W递进式选择代码块。可选中光标所在的单词或段落,连... 查看详情

idea快捷键大全(windows)(代码片段)

...中的行(必备)Ctrl+X剪切光标所在行或剪切选择内容Ctrl+C复制光标所在行或复制选择内容Ctrl+D复制光标所在行或复制选择内容,并把复制内容插入光标位置下面(必备)Ctrl+W递进式选择代码块。可选中光标所在的单词或段落,连... 查看详情

androidstudio快捷键

Ctrl(Command)+C复制当前行或选中的内容Ctrl(Command)+D粘贴当前行或选中的内容Ctrl(Command)+X剪切当前行或选中的内容Ctrl(Command)+Y删除行Ctrl(Command)+Z倒退Ctrl(Command)+Shift+Z向前Alt(Option)+Enter自动修正Ctrl(Comman 查看详情

pycharm常用快捷键

...Ctrl+Alt+L:格式化代码(可以很好的规范代码)。3.Ctrl+D:复制当前行到下一行或复制选中内容插入光标所在位置。4.Ctrl+Y:删除当前行或选中行。5.Ctrl+(+/-):展开或折叠当前代码块(可以使用#region...#endregion来指定某段内容为代... 查看详情

intellijidea中快捷键大全

...行?(必备)Ctrl?+?X剪切光标所在行或剪切选择内容Ctrl?+?C复制光标所在行或复制选择内容Ctrl?+?D复制光标所在行或复制选择内容,并把复制内容插入光标位置下面?(必备)Ctrl?+?W递进式选择代码块。可选中光标所在的单词或段落... 查看详情

使用滞后函数访问当前行值

】使用滞后函数访问当前行值【英文标题】:Accessingcurrentrowvaluewithlagfunction【发布时间】:2016-04-1521:23:19【问题描述】:我想计算前一列和当前列之间的差异,并将其设为一个名为increase的新列。为此,我使用lagwindowfunction。由... 查看详情

intellijideaformac快捷键整理

...进代码19Command+X剪切当前行或选中的块到剪贴板20Command+C复制当前行或选中的块到剪贴板21Command+V从剪贴板粘贴22Command+Shift+V从最近的缓冲区粘贴23Command+D复制当前行或选中的块24Command+Delete删除当前行或选中的块的行25Control+Shift+J... 查看详情

在intellijidea里面的快捷键

...sp;剪切光标所在行或剪切选择内容  Ctrl+C  复制光标所在行或复制选择内容  Ctrl+D  复制光标所在行或复制选择内容,并把复制内容插入光标位置下面 (必备)  Ctrl+W  递进式选择代... 查看详情

滞后函数 - 为最后一个值创建虚拟行?

...对于截止日期,我使用SQLServer2012中的LAG函数从上一行“复制”下一个截止日期。它工作正常,但我想知道是否可以创建一个 查看详情

codeblocks常用快捷键

编辑部分:Ctrl+A:全选Ctrl+C:复制Ctrl+X:剪切Ctrl+V:粘贴Ctrl+Z:撤销Ctrl+S:保存Ctrl+Y/Ctrl+Shift+Z:重做(也就是前进一步)Ctrl+Shift+C:注释掉当前行或选中块Ctrl+Shift+X:解除注释(最新版的将其替换为截图功能)Tab:缩进当前行或选... 查看详情

codeblocks常用操作快捷键

编辑部分:Ctrl+A:全选Ctrl+C:复制Ctrl+X:剪切Ctrl+V:粘贴Ctrl+Z:撤销Ctrl+S:保存Ctrl+Y/Ctrl+Shift+Z:重做Ctrl+Shift+C:注释掉当前行或选中块Ctrl+Shift+X:解除注释Tab:缩进当前行或选中块Shift+Tab:减少缩进按住Ctrl,滚动鼠标滚轮,放大... 查看详情

idea常用快捷汇总(代码片段)

...本替换Ctrl+Y删除光标所在行或删除选中的行(必备)Ctrl+D复制光标所在行或复制选择内容,并把复制内容插入光标位置下面Ctrl+F1在光标所在的错误代码处显示错误信息(必备)Ctrl+Fn+F3调转到所选中的词的下一个引用位置(必备... 查看详情

vi删除多行,替换,复制

VI中的多行删除与复制法一:单行删除,:1(待删除行)d多行删除,:1,10d法二:光标所在行,dd光标所在行以下的N行,Ndd方法1:光标放到第6行,输入:2yy光标放到第9行,输入:p此方法适合复制少量行文本的情况,复制第6行... 查看详情

idea快捷键(自己使用)(代码片段)

...备)Ctrl+X剪切光标所在行或剪切选择内容Ctrl+C复制光标所在行或复制选 查看详情

案例陈述中的 SQL 滞后

...rentCLUSTERn=PreviousCLUSTERn然后将PreviousPRODCAT作为PREVCAT添加到当前行...ORA-30484:missingwindowspecificationforthisfunction30484.00000-"missingwindows 查看详情

idea和eclipse中怎样快速复制当前行

步骤一:通过快捷键“ctrl+alt+向下箭头”复制上面一行代码。步骤二:按住“alt+向上或向下箭头”移动本行代码向上或向下移动,点击箭头一次,移动一行。效果如下图。参考技术Aidea快速复制当前行:光标移到行尾,按快捷键... 查看详情