【发布时间】:2019-04-30 17:44:24
【问题描述】:
我有一个 DataFrame 和一个作为字符串的列列表,我需要在原始数据框中添加一个列,该列是 | 分隔的值列表,其中 null 变成字符串 @987654323 @
这是我目前拥有的代码:
def mergeColumns(cols: Array[String], df: DataFrame, newName: String): DataFrame = {
val dfColumns = cols.map( columnName => df(columnName) )
df.withColumn(newName, concatenate(array(dfColumns: _*), lit("|")))
}
val concatenate: UserDefinedFunction = udf( (columns: Seq[Any], separator: String) => {
columns.map({
case null => "null"
case default => default.toString
}).mkString(separator)
})
并且该代码有效,但前提是所有提供的列都属于同一类型,并且我当前的计划是尝试将它们全部转换为 String 类型。所以我有两个问题:
1)一般来说有没有更好的方法来做到这一点?
2)如果没有,我如何将所有dfColumns 列转换为字符串?
【问题讨论】:
标签: scala apache-spark dataframe user-defined-functions