我对Spark的概念理解得很好,但仍在处理表达式的具体语法选项。我正在使用Java 17和Spark 3.3.0。
我有一个列名为foo
的表格,它的值不应该比30高太多。 我想添加一个列,该列是使用foo
与30
作比例计算,即用foo
的值除以30
并使其规范化为0.0 <= proportion <= 1.0
. 最后提到,foo
是十进制类型,用BigDecimal
表示了Java中的形式。
我可以使用以下Java代码来进行以上计算:
BigDecimal maxVal = new BigDecimal(30);
BigDecimal proportion = foo.max(maxVal).divide(maxVal);
(或者我可以先将其除以
maxVal
,然后取结果和1.0
的最大值,尽管上述第一种方法可能更有效率且语义更直接。)在Spark中,我应该如何最好地做到这一点?以下方法似乎有效,并且可以让我完成大部分工作:
BigDecimal maxVal = new BigDecimal(30);
df = df.withColumn("proportion", col("foo").divide(maxVal));
但是关于max()
的部分,我怎么让它在30
处截断值呢? 我只能立即找到的一个“max”函数是Spark SQL的MAX()
聚合函数。