首页 > 解决方案 > Scala:创建基于地图的 UDF

问题描述

数据框 df10 的架构

root
|-- ID: string (nullable = true)
|-- KEY: array (nullable = true)
|    |-- element: string (containsNull = true)

代码

val gid1 = 505
val array1: Array[String] = Array("atm_P3", "fee_P6", "c_P8", "card_P4", "iss_P5", "vat_P7")
//simplistic udf
val isSubsetArrayUDF = udf { a : Seq[String] =>  if (!{for (elem <- a) yield array1.contains(elem)}.contains(false) == true) gid1 else 0}
val df11 = df10.withColumn("is_subset_KEY", isSubsetArrayUDF(col("tran_particular")))

我需要使用给定的地图为 df10 中的每个“KEY”分配一个“GID”

Map(KEY -> WrappedArray(atm_P3, fee_P6, c_P8, card_P4, iss_P5, vat_P7, cif_P1, cif_P2), GID -> 505)
Map(KEY -> WrappedArray(atm_P3, fee_P6, c_P8, card_P4, iss_P5, vat_P7, cif_P2), GID -> 423)
...

如何使用udf来实现?

标签: scalaapache-sparkapache-spark-sqluser-defined-functions

解决方案


推荐阅读