【发布时间】:2017-07-07 02:28:48
【问题描述】:
我正在编写具有以下缓冲区架构的 udaf:
bufferSchema: StructType = StructType(
StructField("grades", MapType(StructType(StructField("subject", StringType) :: StructField("subject_type", StringType) :: Nil),
ArrayType(StructType(StructField("date", LongType) :: StructField("grade", IntegerType) :: Nil)))) :: Nil)
看起来 spark 在内部将键类型解释为 GenericRowWithSchema 而不是简单的 (String,String)。 所以每当我尝试从地图中拉出时:
override def update(buffer: MutableAggregationBuffer, input: Row): Unit = {
var buffer_scoresMap = buffer.getAs[Map[(String,String), Array[..]](0)
buffer_scoresMap.get(("k1","k2")) 返回 None 即使这个键肯定在地图中,我什至在调试中看到它。
我尝试将密钥更改为GenericRowWithSchema,然后返回(String,String),然后从地图中获取,但没有运气。
有什么想法吗?
【问题讨论】:
标签: scala apache-spark apache-spark-sql