【发布时间】:2019-10-28 02:58:16
【问题描述】:
我在 PySpark 中有以下数据框:
|ID |YearBLT|MinYear|MaxYear|ADP_Range |
---------------------------------------------------------
|164876|2010 |2004 |2009 |[2004,2009] |
|164877|2008 |2000 |2011 |[2000, 2002, 2011] |
|164878|2000 |2003 |2011 |[2003, 2011] |
|164879|2013 |1999 |2015 |[2003, 2007, 2015, 1999]|
YearBLT 是房产的建造年份,ADP_Range 代表建筑规范更新的年份,MinYear/MaxYear 代表 ADP 范围的最短和最长年份。
我正在尝试添加一列 (ADP_Year),该列具有最适用的构建代码,其逻辑如下:
- 如果 YearBLT 小于 MinYear,ADP_Year == "NA"
- 如果 YearBLT 大于 MaxYear,ADP_Year == Max(ADP_Range)
- 如果 YearBLT 介于两者之间,则选择 ADP_Range 中 YearBLT 下方最接近的日期
预期的输出如下:
|ID |YearBLT|MinYear|MaxYear|ADP_Range |ADP_Year|
------------------------------------------------------------------
|164876|2010 |2004 |2009 |[2004,2009] |2009 |
|164877|2008 |2000 |2011 |[2000, 2002, 2011] |2002 |
|164878|2000 |2003 |2011 |[2003, 2011] |NA |
|164879|2013 |1999 |2015 |[2003, 2007, 2015, 1999]|2007 |
2010 > MaxYear,所以它从 MaxYear 中选择值,
2008 年介于 2000 年和 2011 年之间;因为有第三个值 2002,所以选择它是因为它比 2000 年更新
2000
2013 年介于 1999 年和 2015 年之间;由于 2007 年和 2015 年有第三和第四个值,因此选择 2007 年
前两种情况很简单,我有它们的工作代码:
dfADP = dfADP.withColumn("ADP_Year",when(dfADP['YearBLT'] < dfADP['MinYear'], lit("NA")\
.when(dfADP['YearBLT'] > dfADP['MaxYear'],dfADP['MaxYear'])))
我正在为此旋转我的轮子,如果这可能的话,我希望得到一些建议。
【问题讨论】:
标签: python apache-spark pyspark