【发布时间】:2017-09-20 04:54:46
【问题描述】:
请帮助我,我是新手。下面是我的数据框
type col1 col2 col3
1 0 41 0
1 27 0 0
1 1 0 0
1 183 0 2
2 null 0 0
2 null 10 0
3 0 126 0
3 2 0 1
3 4 0 0
3 5 0 0
下面应该是我的输出
type col1 col2 col3 result
1 0 41 0 0
1 27 0 0 14
1 1 0 0 13
1 183 0 2 -168
2 null 0 0
2 null 10 0
3 0 126 0 0
3 2 0 1 125
3 4 0 0 121
3 5 0 0 116
挑战在于必须对每组类型列执行此操作,公式类似于 prev(col2)-col1+col3
我尝试在 col2 上使用 window 和 lag 函数来填充结果列,但它不起作用。
下面是我的代码
part = Window().partitionBy().orderBy('type')
DF = DF.withColumn('result',lag("col2").over(w)-DF.col1+DF.col3)
现在我正在努力尝试使用地图功能,请帮助
【问题讨论】:
-
您的逻辑
prev(col2)-col1+col3与预期输出不匹配。 -
是的 Ramesh 同意它必须是 prev(result)-col1+col3 。但是我们如何取 col2 41 的值并用 col1 27 减去呢? .所以在考虑这些方面并认为 lag(col2) 会动态修复,但我悲惨地失败了。试图多想,但我没有得到任何线索
-
@user3292373 prev(result)-col1+col3 也不匹配。第二行使用这个变成 -27,而不是 14。
-
请告诉我们如何实现这一点我应该得到输出为 41-27+0=14 的下一行它必须采用 14-1+0=13 和 13-183+2= -168 这对于每组类型 1,2 和 3 都必须重复。
-
13-183+2 = 172 而不是 168。是真的吗?
标签: python hadoop apache-spark hive pyspark