【问题标题】:Concat column values in a dataframe连接数据框中的列值
【发布时间】:2021-11-22 02:19:59
【问题描述】:

我有一个如下所示的 csv 文件

name, state, a, b, c, d, ..., x
Jon,  NY,    1, 4, 6, 2,      6
Eric, CA,    5, 3, 1, 5,      6
Chris,LA,    4, 4, 3, 1,      5

我想要以下结果(一列带有连接字段(inkl 标题名称))

concate-fields
"name=Jon,   state=NY, a=1, b=4, c=6, d= 2, ... x=6"
"name=Eric,  state=CA, a=5, b=3, c=1, d= 5, ... x=6"
"name=Chris, state=LA, a=4, b=4, c=3, d= 1, ... x=5"

a...>x 中可能有很多标头,因此应以通用方式附加这些标头

我现在有

import org.apache.spark.sql.functions.{concat, lit}
val lp = sample.select(concat(lit("name), $"name", lit(",state="), $"state")
display(lp)

但我无法为列 a->x 添加相同的内容(因为这需要以通用方式完成)

【问题讨论】:

    标签: scala dataframe apache-spark concatenation databricks


    【解决方案1】:

    您可以通过在df.columns() 上调用map 方法来动态创建SQL 表达式来连接列,如下所示。

    val df = // Read CSV
    
    df.withColumn("concate-fields", expr(s"concat(${df.columns.map(col=>s"'$col=', nvl($col,'null'),','").mkString("").dropRight(4)})"))
        .withColumn("concate-fields", concat(lit("\""),col("concate-fields"),lit("\"")))
    

    【讨论】:

    • 这行得通!如何处理空值(某些行具有空值,这导致串联字段也为空(如果一个单元格为空,则整个串联字段为空)
    • 您可以使用nvlcoalesce函数。更新了答案。
    猜你喜欢
    • 2021-02-09
    • 2017-02-03
    • 2018-12-10
    • 1970-01-01
    • 1970-01-01
    • 2022-07-11
    • 1970-01-01
    • 2020-04-08
    • 1970-01-01
    相关资源
    最近更新 更多