【发布时间】:2017-03-06 13:07:46
【问题描述】:
我的 avro 架构中有一个十进制列“TOT_AMT”定义为“字节”类型和逻辑类型“十进制”。
使用 databricks spark-avro 在 spark 中创建数据框后,当我尝试使用 sum 函数对 TOT_AMT 列求和时,它会抛出 “函数求和需要数字类型而不是 Binarytype”错误。
该列在 avro 模式中定义如下,
name="TOT_AMT","type":["null",{ "type":"bytes","logicaltype":"decimal","precision":20,"scale":10} ]
我正在创建数据框并总结如下,
val df=sqlContext.read.format("com.databricks.spark.avro").load("input dir")
df.agg(sum("TOT_AMT")).show()
在创建数据帧时,十进制值似乎被读取为 Binarytype。在这种情况下,我们如何对这些十进制列执行数字运算?能不能把这个Byte数组转成BigDecimal再进行计算。
【问题讨论】:
-
您能否提供您的数据的示意图代码或概览?尤其是减少之前您当前 RDD 的状态可能很重要。显式类型转换很可能会解决问题。
标签: scala apache-spark apache-spark-sql avro spark-avro