我看到了这个问题的一些变化,但没有找到确切的我要找的。问题是:
我有一些报告的名称,我已经收集在一个Dataframe和数据透视。我遇到的问题是关于报告名称的弹性。我不能保证每90天就有一次数据,而且rpt1、rpt2和rpt3都会在那里。因此,如何仅在列存在时创建计算。我已经概述了我的代码现在的样子。如果所有列都在那里,它就可以工作,但是我想对它进行进一步的验证,以确保如果报告不在90天窗口中,管道线不会出错,而是跳过.withcolumn添加
df1=(reports.alias("r")
.groupBy(uniqueid)
.filter("current_date<=90")
.pivot(report_name)
**
Result would be the following columns uniqueid Rpt1, Rpt2, Rpt3
* +---+-----+------+----------+
* |id |Rpt1 |Rpt2 |Rpt3 |
* +---+-----+------+----------+
* |205|72 |36 | 12 |
**
df2=(df1.alias("d1")
.withColumn("new_calc",expr("Rpt2/Rpt3"))
1条答案
按热度按时间6mzjoqzu1#
你可以用一个
Try
monad并返回原始Dataframe,如果withColumn
失败。如果要重用,也可以将其定义为方法:
如果需要链接多个转换,可以将其与
transform
:或者可以将其实现为
implicit class
:自
withColumn
适用于所有数据集,如果需要withColumnIfExist
要对所有数据集(包括dataframe)进行常规操作,请执行以下操作: