我对Spark在概念上理解得很好,但我仍然在导航表达式的特定语法选项.我使用的是带有Java 17的Spark 3.3.0.
我有一个表,其列为foo
,其值不应高于30.我想添加一个比例为foo
与30
的列,即foo
的值归一化为0.0 <= proportion <= 1.0
,foo
的分界值为30
.最后,foo
是一个DECIMAL类型,在Java中用BigDecimal
表示.
在Java中,我可能会这样计算:
BigDecimal maxVal = new BigDecimal(30);
BigDecimal proportion = foo.max(maxVal).divide(maxVal);
(或者我可以先除以maxVal
,然后取结果的最大值和1.0
,尽管上面的第一种方法在语义上可能更高效、更直接.)
在《星火》里,我该怎么做才是最好的?以下几条似乎很管用,让我走到了最远的地方:
BigDecimal maxVal = new BigDecimal(30);
df = df.withColumn("proportion", col("foo").divide(maxVal));
但max()
的那部分怎么样,这样我就可以把它的值砍到30
了?我能随手找到的唯一"max"函数是Spark SQL MAX()
聚合函数.