我有一个包含非常大的整数值的数据框,例如:

42306810747081022358

当我试图将其转换为长时间时,它可以在Java中工作,但不能在 Spark 环境下工作,我得到了
   NumberFormatException: For input string("42306810747081022358")

然后,我也尝试将其转换为十进制(BigDecimal)值。同样,可以轻松地在Java中做到这一点,但在Spark中:
dframe.withColumn(“c_number”,col(“c_a”)。cast(new DecimalType()));

这样我就不会有任何异常,但是我可以看到所有结果值都是null。

我也尝试将UDF用于此目的,但得到了相同的结果:
UDF1 cTransformer = new UDF1<String, BigDecimal>() {
        @Override
        public BigDecimal call(String aString) throws Exception {
            return new BigDecimal(aString);
        }
    };
sqlContext.udf().register("cTransformer", cTransformer, new DecimalType());
dframe = dframe.withColumn("c_number", callUDF("cTransformer", dframe.col("c_a")));

再一次,我得到的是一列全零的列。

我应该如何进行?

最佳答案

尝试:

dframe.withColumn("c_number", dframe.col("c_a").cast("decimal(38,0)"))

关于java - 如何将列值从字符串转换为十进制?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40225485/

10-10 16:49