【发布时间】:2016-10-24 18:52:11
【问题描述】:
我有一个包含一个非常大的整数值的数据框,例如:
42306810747081022358
当我尝试将它转换为 long 它在 Java 中工作但不在 spark 环境下时,我得到了
NumberFormatException: For input string("42306810747081022358")
然后我也尝试将它转换为十进制(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")));
在这里,我再次得到的是一个全为零的列。
我应该如何进行?
【问题讨论】:
标签: java apache-spark apache-spark-sql