Spark withColumn()函数用于重命名,更改值,转换现有DataFrame列的数据类型,还可以用于创建新列,在本文中,我将通过Scala和Pyspark示例向您介绍常用的DataFrame列操作。
首先,让我们创建一个要使用的DataFrame。
1 | val data = Seq(Row(Row("James ","","Smith"),"36636","M","3000"), |
Spark withColumn –更改列的数据类型
通过在DataFrame上使用Spark withColumn并在列上使用强制转换功能,我们可以更改DataFrame列的数据类型。下面的语句将“工资”列的数据类型从字符串更改为整数。
1 | df.withColumn("salary",col("salary").cast("Integer")) |
更改现有列的值
withColumn() 函数也可以用于更新现有列的值。为了更改值,将现有的列名作为第一个参数传递,将值分配为第二个列。请注意,第二个参数应为Columntype。
1 | df.withColumn("salary",col("salary")*100) |
此代码段将“ salary”的值乘以100,并将其值更新回“ salary”列。
从现有列派生新列
要创建新列,请使用您希望新列使用的名称指定第一个参数,并通过对现有列进行操作来使用第二个参数来分配值。
1 | df.withColumn("CopiedColumn",col("salary")* -1) |
此代码段通过将“工资”列乘以值-1来创建新列“ CopiedColumn”。
如果派生出来的列需要复杂的计算,则可以使用udf来进行转换
1 | // 利用withColumn方法,新增列的过程包含在udf函数中 |
添加一个新列
要创建新列,请将所需的列名传递给withColumn()转换函数的第一个参数。确保此新列尚未出现在DataFrame上(如果显示的话)会更新该列的值。在下面的代码片段中,lit()函数用于将常量值添加到DataFrame列。我们还可以链接以添加多个列。
1 | df.withColumn("Country", lit("USA")) |
重命名DataFrame列名
要重命名现有列,请在DataFrame上使用“ withColumnRenamed ”功能。
1 | df.withColumnRenamed("gender","sex") |
从Spark DataFrame删除一列
使用“放置”功能从数据框中放置特定的列。
1 | df.drop("CopiedColumn") |
将列拆分为多列
尽管此示例未使用withColumn()函数,但我仍然觉得用map()转换函数将一个DataFrame列拆分为多个列还是很好的解释。
1 | import spark.implicits._ |
此代码段将“名称”列拆分为“名字”,“姓氏”,并将“地址”列拆分为“地址行1”,“城市”,“州”和“邮政编码”。产量低于产出:
1 | root |
注意:请注意,所有这些函数在应用函数后都将返回新的DataFrame,而不是更新DataFrame。
Spark withColumn完整示例
1 | package com.sparkbyexamples.spark.dataframe |