【发布时间】:2020-07-22 07:52:43
【问题描述】:
我有一个定义列的列表:
case class ExcelColumn(colName: String, colType: String, colCode: String)
val cols = List(
ExcelColumn("Products Selled", "text", "products_selled"),
ExcelColumn("Total Value", "int", "total_value"),
)
还有一个文件(带有标题列Products Selled、Total Value 的csv)作为数据帧读取。
val df = spark.read
.option("header", "true")
.option("inferSchema", "true")
.csv(filePath)
// csv file have header as colNames
var finalDf = df
.withColumn("row_id", monotonically_increasing_id)
.select(cols
.map(_.name.trim)
.map(col): _*)
// convert df col names as colCodes (for kudu table columns)
cols.foreach(col => finalDf = finalDf.withColumnRenamed(col.name.trim, col.colCode.trim))
在最后一行,我将数据框列名从Products Selled 更改为products_selled。因此,finalDf 是 var。
我想知道是否是将 finalDf 声明为 val 而不是 var 的解决方案。
我尝试了类似下面的代码,但 withColumnRenamed 返回一个新的 DataFrame,但我无法在 cols.foreach 之外执行此操作
cols.foreach(col => finalDf.withColumnRenamed(col.name.trim, col.colCode.trim))
【问题讨论】:
标签: scala dataframe apache-spark