如何将十进制逻辑类型读取到Spark数据框中

时间:2018-11-16 11:15:58

标签: scala apache-spark avro spark-avro

我有一个Avro文件,其中包含一个十进制逻辑类型,如下所示:

"type":["null",{"type":"bytes","logicalType":"decimal","precision":19,"scale":2}]


当我尝试使用Scala Spark库读取文件时,df模式为

MyField: binary (nullable = true)


如何将其转换为十进制类型?

1 个答案:

答案 0 :(得分:1)

您可以在读取操作中指定架构:

val schema = new StructType()
    .add(StructField("MyField", BooleanType))

或者您可以强制转换列

val binToInt: String => Integer = Integer.ParseInt(_, 2);
val binToIntegerUdf = udf(binToInt);

df.withColumn("Myfield", binToIntegerUdf(col("MyField").cast("string")))