我在包含的表中有示例資料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
對于 value 500,范圍是1-500在 500 米內,1221在1000-1500等..
我嘗試使用Spark.sql.functions.sequence,但它采用了開始和停止列值,這不是我想要的并且想要在我上面提到的范圍內。它還創建了一個從開始列值到停止列值的 Range 陣列。
我將 Spark2.4.2 與 Scala 2.11.12 一起使用,非常感謝任何幫助。
uj5u.com熱心網友回復:
您可以使用以下方式鏈接您動態生成的多個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)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/432894.html
上一篇:在Spark上讀取CSV檔案
