我有一个数据框,其中包含一个非常大的整数值,例如:
42306810747081022358
当我试图将它转换为 long 它在 Java 中工作但不在 spark 环境下时,我得到了
NumberFormatException: For input string("42306810747081022358")
然后我尝试将它转换为 Decimal (BigDecimal) 值。同样,在 Java 中很容易做到,但在 Spark 中: dframe.withColumn(“c_number”,col(“c_a”).cast(new DecimalType()));
这样我就没有得到任何异常,但是我可以看到所有结果值都是空的。
为此,我也尝试使用 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")));
在这里,我再次得到的是一个全为零的列。
我该如何进行?
原文由 Igor Kustov 发布,翻译遵循 CC BY-SA 4.0 许可协议
尝试: