【问题标题】:How to pass elements of a list to concat function?如何将列表的元素传递给 concat 函数?
【发布时间】:2019-01-23 06:32:06
【问题描述】:

我目前正在使用以下方法来连接数据框中的列:

val Finalraw = raw.withColumn("primarykey", concat($"prod_id",$"frequency",$"fee_type_code"))

但问题是我不想对列进行硬编码,因为列数每次都在变化。我有一个包含列名的列表:

columnNames: List[String] = List("prod_id", "frequency", "fee_type_code")

那么,问题是如何将列表元素传递给concat 函数,而不是对列名进行硬编码?

【问题讨论】:

    标签: scala list apache-spark dataframe concatenation


    【解决方案1】:

    concat 函数将多列作为输入,而您有一个字符串列表。您需要转换列表以适应方法输入。

    首先,使用map 将字符串转换为列对象,然后使用:_* 解包列表以正确将参数传递给concat

    val Finalraw = raw.withColumn("primarykey", concat(columnNames.map(col):_*))
    

    有关:_* 语法的说明,请参阅What does `:_*` (colon underscore star) do in Scala?

    【讨论】:

      【解决方案2】:

      将列表元素映射到单独变量中的 List[org.apache.spark.sql.Column]。 看看这个。

      scala> val df = Seq(("a","x-","y-","z")).toDF("id","prod_id","frequency","fee_type_code")
      df: org.apache.spark.sql.DataFrame = [id: string, prod_id: string ... 2 more fields]
      
      scala> df.show(false)
      +---+-------+---------+-------------+
      |id |prod_id|frequency|fee_type_code|
      +---+-------+---------+-------------+
      |a  |x-     |y-       |z            |
      +---+-------+---------+-------------+
      
      
      scala> val arr = List("prod_id", "frequency", "fee_type_code")
      arr: List[String] = List(prod_id, frequency, fee_type_code)
      
      scala> val arr_col = arr.map(col(_))
      arr_col: List[org.apache.spark.sql.Column] = List(prod_id, frequency, fee_type_code)
      
      scala> df.withColumn("primarykey",concat(arr_col:_*)).show(false)
      +---+-------+---------+-------------+----------+
      |id |prod_id|frequency|fee_type_code|primarykey|
      +---+-------+---------+-------------+----------+
      |a  |x-     |y-       |z            |x-y-z     |
      +---+-------+---------+-------------+----------+
      
      
      scala>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-15
        • 1970-01-01
        相关资源
        最近更新 更多