假设我有像
这样的数据集Name | Start_Year| End_Year
Steven | 1995 | 1999
Ema | 2000 | 2004
Hope | 2005 | 2006
输出应该是:
Name | Year
Steven | 1995
Steven | 1996
Steven | 1997
Steven | 1998
Steven | 1999
Ema | 2000
Ema | 2001
Ema | 2002
Ema | 2003
Ema | 2004
Hope | 2005
Hope | 2006
我怎样才能实现这一目标?
答案 0 :(得分:1)
您可以使用UDF将开始年份和结束年份转换为范围内所有年份的数组,然后使用explode
将该数组中的每个项目转换为一行:
import org.apache.spark.sql.functions._
val toRange = udf { (y1: Int, y2: Int) => (y1 to y2).toArray }
input
.withColumn("years", toRange($"Start_Year", $"End_Year"))
.select($"Name", explode($"years") as "Year")