【发布时间】:2020-07-20 17:47:06
【问题描述】:
我需要将 RDBMS 表摄取到 Hive 中,并且在使用 regex_replace 模式将其插入 Hive 表之前,我必须清理其字符串列中的数据。在无法理解如何将它应用到我的 dataFrame 之后,我终于在 Scala 中发现了一个方法 foldLeft,它有助于满足要求。
我了解 foldLeft 如何处理集合,例如:
List(1,3,9).foldLeft(100)((x,y) => x+y)
foldLeft 接受参数:initialValue 和一个函数。它将函数的结果添加到累加器中。在上述情况下,结果为:113。
但说到数据框,我无法理解它是如何工作的。
val stringColumns = yearDF.schema.fields.filter(_.dataType == StringType).map(_.name)
val finalDF = stringColumns.foldLeft(yearDF){ (tempdf, colName) => tempdf.withColumn(colName, regexp_replace(col(colName), "\n", "")) }
在上面的代码中,我从dataFrame中得到了String列:yearDF,它保存在foldLeft的累加器中。我对foldLeft中使用的函数有以下疑惑:
- tempDF 的值是多少?如果和yearDF一样,怎么映射到yearDF?
- 如果在函数中使用
withColumns并将结果添加到 yearDF,为什么不创建重复的列时
谁能解释一下,让我对 foldLeft 有更好的了解。
【问题讨论】:
标签: scala