【问题标题】:How cast a WrappedArray[WrappedArray[(String, String)]] to Array[String] in Spark (Scala)如何在 Spark (Scala) 中将 WrappedArray[WrappedArray[(String, String)]] 转换为 Array[String]
【发布时间】:2019-07-25 21:51:08
【问题描述】:

很好,

我正在使用 Scala 中的 spark 框架。我的数据框有一列具有以下结构和内容:

+---------------------------------------------------------------------------------------------+
|Email_Code                                                                                   |
+---------------------------------------------------------------------------------------------+
|[WrappedArray([3,spain]), WrappedArray([,]), WrappedArray([3,spain])]                        |
|[WrappedArray([3,spain]), WrappedArray([3,spain])]                                           |
+---------------------------------------------------------------------------------------------+

|-- Email_Code: array (nullable = true)
 |    |-- element: array (containsNull = false)
 |    |    |-- element: struct (containsNull = false)
 |    |    |    |-- Code: string (nullable = true)
 |    |    |    |-- Value: string (nullable = true)

我正在尝试开发一个 udf 函数,该函数获取数组中存在的“代码”结构的所有值。但是我做不到……

我想要一个类似如下的退出:

+---------------------------------------------------------------------------------------------+
|Email_Code                                                                                   |
+---------------------------------------------------------------------------------------------+
|[3,,3]                                                                                       |
|[3,3]                                                                                        |
+---------------------------------------------------------------------------------------------+

有什么帮助吗?

【问题讨论】:

    标签: scala apache-spark dataframe apache-spark-sql user-defined-functions


    【解决方案1】:

    我必须修复它:

    val transformation = udf((data: Seq[Seq[Row]]) => {data.flatMap(x => x).map{case Row(code:String, value:String) => code}})
    
    df.withColumn("result", transformation($"columnName"))
    

    【讨论】:

    • 您在映射非详尽案例时可能会遇到匹配错误。使用collect 代替它采用结合过滤器和映射的功能。 val udf = (data: Seq[Seq[Row]]) => {data flatMap identity collect{ case Row(code:String, value:String) => code} }
    猜你喜欢
    • 1970-01-01
    • 2017-06-13
    • 2021-09-28
    • 2022-12-17
    • 1970-01-01
    • 2021-07-06
    • 1970-01-01
    • 2020-08-17
    • 2017-01-29
    相关资源
    最近更新 更多