关键词:
【中文标题】复制当前行或滞后行【英文标题】: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】:如果我正确理解您的问题,您只想在您发现 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 都是 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快速复制当前行:光标移到行尾,按快捷键... 查看详情