如何从火花中的另一个数据框值重命名数据框列和数据类型?

高拉夫马图尔

嗨,我有两个这样的数据框:

import spark.implicits._
import org.apache.spark.sql._

val transformationDF = Seq(
  ("A_IN", "ain","String"),
  ("ADDR_HASH","addressHash","String")
).toDF("db3Column", "hudiColumn","hudiDatatype")

val addressDF=Seq(
("123","uyt"),
("124","qwe")
).toDF("A_IN", "ADDR_HASH")

现在我想重命名列并更改transformationdf中提到的值的数据类型。transformationDF中的hudicolumn名称和hudidatatype将成为addressDF的列名称和数据类型。我试过这样的代码来改变但不起作用:

var db3ColumnName:String =_
var hudiColumnName:String =_
var hudiDatatypeName:String = _

for (row <- transformationDF.rdd.collect)
{   
     db3ColumnName = row.mkString(",").split(",")(0)
      hudiColumnName= row.mkString(",").split(",")(1)
    hudiDatatypeName = row.mkString(",").split(",")(2)
    

addressDF.withColumnRenamed(db3ColumnName,hudiColumnName).withColumn(hudiColumnName,col(hudiColumnName).cast(hudiDatatypeName))
} 

现在,当我打印 addressDF 时,更改不会反映出来。

在此处输入图像描述

谁能帮我这个 。

赫里斯托·伊利耶夫

这是一个要求使用的教科书案例foldLeft

val finalDF = transformationDF.collect.foldLeft(addressDF){ case (df, row) =>
  {
    val db3ColumnName = row.getString(0)
    val hudiColumnName = row.getString(1)
    val hudiDatatypeName = row.getString(2)

    df.withColumnRenamed(db3ColumnName, hudiColumnName)
      .withColumn(hudiColumnName, col(hudiColumnName).cast(hudiDatatypeName))
  }
}

Spark 中的数据集是不可变的,每个“修改”数据集的操作实际上都会返回一个新对象,而不会更改调用该操作的对象。上面foldLeft有效地从所有转换开始addressDF并将所有转换链接到中间对象,这些对象作为第二个参数列表中的第一个参数传递。当前迭代的返回值成为下一次迭代的输入。最后一次迭代的返回值就是foldLeft自身的返回值。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用来自另一个数据框的值重命名数据框的列

使用与另一个数据框的匹配来重命名数据框列表中的列

如何用另一个数据框重命名pandas数据框列?

重命名数据框中的列而另一个特定的列

转换Pandas数据框的数据类型以匹配另一个数据框

如何基于R中的另一个数据帧重命名数据帧的所有列?

使用 scala 重命名与另一个数据框相关的数据框的列名

用另一个数据框熊猫中的每两列重命名

根据另一个数据框重命名多列中的记录

通过从系列和数据框列名的组合中提取来重命名一个数据框的列

使用来自另一个数据框的名称重命名列

根据另一个数据框的列值过滤数据框

当列值是另一个数据框的列名时的数据框操作

Spark Scala:从另一个数据框更新数据框列的值

根据另一个数据框计算数据框中的列值

根据条件为另一个数据框的数据框列设置值

用另一个数据框的值填充数据框列

如何用另一个数据框列替换数据框列

用另一个数据框的值替换一个数据框的列值

仅重命名数据框列表中每个数据框的最后一列

如何根据另一个数据框中的列的存在来更新数据框中列的值

如何从匹配 2 列的另一个数据框中更新数据框的列值?

如何使用另一个数据框添加数据框并基于列添加公共列值?

如何基于另一个数据框中的列值创建布尔列

如何基于多列从另一个数据框中减去另一个数据框中的值?

如何使用另一个数据框的子集填充数据框的列?

从另一个数据框填充一个数据框的列

如何根据另一个数据框中的列填充数据框中的空值?

如何根据另一个数据框条件替换数据框列中的值