【发布时间】:2018-06-16 11:57:26
【问题描述】:
我正在尝试根据输入变量 vIssueCols 添加几列
from pyspark.sql import HiveContext
from pyspark.sql import functions as F
from pyspark.sql.window import Window
vIssueCols=['jobid','locid']
vQuery1 = 'vSrcData2= vSrcData'
vWindow1 = Window.partitionBy("vKey").orderBy("vOrderBy")
for x in vIssueCols:
Query1=vQuery1+'.withColumn("'+x+'_prev",F.lag(vSrcData.'+x+').over(vWindow1))'
exec(vQuery1)
现在上面的查询将生成如下所示的 vQuery1,它正在工作,但是
vSrcData2= vSrcData.withColumn("jobid_prev",F.lag(vSrcData.jobid).over(vWindow1)).withColumn("locid_prev",F.lag(vSrcData.locid).over(vWindow1))
我不能写一个类似的查询
vSrcData2= vSrcData.withColumn(x+"_prev",F.lag(vSrcData.x).over(vWindow1))for x in vIssueCols
并使用循环语句生成列。一些博客建议添加一个 udf 并调用它,但是使用 udf 我将使用上面的执行字符串方法。
【问题讨论】: