我正在尝试按DataFrame的一列进行分组,并在每个结果组中生成BigDecimal列的min和max值.结果总是产生非常小的(大约0)值.
(min/max针对Double列的类似调用会产生预期的非零值.)
举个简单的例子:
如果我创建以下DataFrame:
import org.apache.spark.sql.{functions => f}
case class Foo(group: String, bd_value: BigDecimal, d_value: Double)
val rdd = spark.sparkContext.parallelize(Seq(
Foo("A", BigDecimal("1.0"), 1.0),
Foo("B", BigDecimal("10.0"), 10.0),
Foo("B", BigDecimal("1.0"), 1.0),
Foo("C", BigDecimal("10.0"), 10.0),
Foo("C", BigDecimal("10.0"), 10.0),
Foo("C", BigDecimal("10.0"), 10.0)
))
val df = rdd.toDF()
Run Code Online (Sandbox Code Playgroud)
选择maxDouble或BigDecimal列将返回预期结果:
df.select(f.max("d_value")).show()
// +------------+
// |max(d_value)|
// +------------+
// | 10.0|
// +------------+
df.select(f.max("bd_value")).show()
// +--------------------+
// | max(bd_value)|
// +--------------------+
// |10.00000000000000...|
// +--------------------+
Run Code Online (Sandbox Code Playgroud)
但是如果我分组然后聚合,我得到Double列的合理结果,但BigDecimal列的值接近于零:
df.groupBy("group").agg(f.max("d_value")).show()
// +-----+------------+ …Run Code Online (Sandbox Code Playgroud)