scala - 如何使用自定义键值名称将映射列转换为结构类型?

标签 scala apache-spark dictionary struct apache-spark-sql

我有一个 UDF,它使用 Scala 内置 toArray 函数将 Map(在本例中为 String -> String)转换为 Struct 数组

val toArray = udf((vs: Map[String, String]) => vs.toArray)

结构体的字段名称为 _1_2

如何更改 UDF 定义,使字段(键)名称为“key”,值名称为“value”作为 UDF 定义的一部分?

[{"_1":"aKey","_2":"aValue"}] 

[{"key":"aKey","value":"aValue"}]

最佳答案

您可以使用一个类:

case class KV(key:String, value: String)

val toArray = udf((vs: Map[String, String]) => vs.map { 
  case (k, v) => KV(k, v)
}.toArray )

关于scala - 如何使用自定义键值名称将映射列转换为结构类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44312503/

相关文章:

java - scala.concurrent.forkjoin.ForkJoinPool 与 java.util.concurrent.ForkJoinPool

apache-spark - 如何在 spark 数据帧中的 ISIN 运算符中传递数据帧

Scala 错误 Spark Streaming Kafka : ambiguous reference to overloaded definition

c++ - C++ 中的快速 map 实现

scala - 修复更高种类类型的类型推断

scala - 如何在Scala中使用同步?

json - play 2 JSON 格式中缺少的属性的默认值

python-3.x - pyspark中的异常值检测

c++ - 这是操纵 C++ 容器元素的正确方法吗?

java - 在 Java 中创建一个 List<Pair<L,R>> 并支持 .get(key) 方法,就像 map 一样。