如何根据列值创建范围列?
how to create range column based on a column value?
我在table中有示例数据,其中包含distance_travelled_in_meter
,其中值是整数类型,如下所示:
distance_travelled_in_meter |
--------------------------- |
500 |
1221|
990 |
575|
我想根据列 distance_travelled_in_meter
的值创建范围。范围列的值具有 500
个间隔。
结果数据集如下:
distance_travelled_in_meter | range
--------------------------- |---------
500 | 1-500
1221|1000-1500
990 |500-1000
575|500-1000
对于值500
,范围是1-500
,因为它在500米以内,1221
在1000-1500
以此类推..
我尝试使用 Spark.sql.functions.sequence
,但它采用了开始和停止列值,这不是我想要的并且希望在我上面提到的范围内。它还创建了一个从开始列值到停止列值的范围数组。
我正在使用 Spark2.4.2 和 Scala 2.11.12
非常感谢任何帮助。
您可以链接多个 when
您动态生成的表达式,如下所示:
val maxDistance = 1221 // you can get this from the dataframe
val ranges = (0 until maxDistance by 500).map(x => (x, x + 500))
val rangeExpr = ranges.foldLeft(lit(null)) {
case (acc, (lowerBound, upperBound)) =>
when(
col("distance_travelled_in_meter").between(lowerBound, upperBound),
lit(s"$lowerBound-$upperBound")
).otherwise(acc)
}
val df1 = df.withColumn("range", rangeExpr)
我在table中有示例数据,其中包含distance_travelled_in_meter
,其中值是整数类型,如下所示:
distance_travelled_in_meter |
--------------------------- |
500 |
1221|
990 |
575|
我想根据列 distance_travelled_in_meter
的值创建范围。范围列的值具有 500
个间隔。
结果数据集如下:
distance_travelled_in_meter | range
--------------------------- |---------
500 | 1-500
1221|1000-1500
990 |500-1000
575|500-1000
对于值500
,范围是1-500
,因为它在500米以内,1221
在1000-1500
以此类推..
我尝试使用 Spark.sql.functions.sequence
,但它采用了开始和停止列值,这不是我想要的并且希望在我上面提到的范围内。它还创建了一个从开始列值到停止列值的范围数组。
我正在使用 Spark2.4.2 和 Scala 2.11.12 非常感谢任何帮助。
您可以链接多个 when
您动态生成的表达式,如下所示:
val maxDistance = 1221 // you can get this from the dataframe
val ranges = (0 until maxDistance by 500).map(x => (x, x + 500))
val rangeExpr = ranges.foldLeft(lit(null)) {
case (acc, (lowerBound, upperBound)) =>
when(
col("distance_travelled_in_meter").between(lowerBound, upperBound),
lit(s"$lowerBound-$upperBound")
).otherwise(acc)
}
val df1 = df.withColumn("range", rangeExpr)