【问题标题】:spark withColumn value generation from all column valuesspark withColumn 从所有列值生成值
【发布时间】:2018-02-08 18:09:11
【问题描述】:

我想从同一行中的所有现有列值中添加一列。 例如,

col1 col2 ... coln      col_new
------------------      -------
True False ...False     "col1-..."
False True ...True      "col2-...-coln"

也就是说,当一个值为 True 时,将其列名加上“-”分隔符并保持相同直到最后一列。我们不知道会有多少列。

如何在 Spark 中使用 withColumn() 实现此目的? (斯卡拉)

【问题讨论】:

    标签: scala apache-spark


    【解决方案1】:

    如果都是BooleanTypes,那么你可以写一个udf函数来获取新列如下

    import org.apache.spark.sql.functions._
    val columnNames = df.columns
    
    def concatColNames = udf((array: collection.mutable.WrappedArray[Boolean]) => array.zip(columnNames).filter(x => x._1 == true).map(_._2).mkString("-"))
    
    df.withColumn("col_new", concatColNames(array(df.columns.map(col): _*))).show(false)
    

    如果都是StringTypes那么你只需要修改udf函数如下

    def concatColNames = udf((array: collection.mutable.WrappedArray[String]) => array.zip(columnNames).filter(x => x._1 == "True").map(_._2).mkString("-"))
    

    你应该得到你需要的东西

    猜你喜欢
    • 1970-01-01
    • 2021-07-13
    • 1970-01-01
    • 2018-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-10
    • 2011-01-30
    相关资源
    最近更新 更多