spark dataFrame 新增一列函数withColumn

本文介绍如何使用Apache Spark的DataFrame API来新增一列,并通过实际代码示例展示了如何使用withColumn函数来实现这一操作。此外,还说明了在使用withColumn函数时需要注意的细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

往一个dataframe新增某个列是很常见的事情。


然而这个资料还是不多,很多都需要很多变换。而且一些字段可能还不太好添加。


不过由于这回需要增加的列非常简单,倒也没有必要再用UDF函数去修改列。


利用withColumn函数就能实现对dataframe中列的添加。但是由于withColumn这个函数中的第二个参数col必须为原有的某一列。所以默认先选择了个ID。


Scala> val df = sqlContext.range(0, 10)
df: org.apache.Spark.sql.DataFrame = [id: bigint]


scala> df.show()
+---+
| id|
+---+
|  0|
|  1|
|  2|
|  3|
|  4|
|  5|
|  6|
|  7|
|  8|
|  9|
+---+




scala> df.withColumn("bb",col(id)*0)
<console>:28: error: not found: value id
              df.withColumn("bb",col(id)*0)
                                     ^


scala> df.withColumn("bb",col("id")*0)
res2: org.apache.spark.sql.DataFrame = [id: bigint, bb: bigint]


scala> df.show()
+---+
| id|
+---+
|  0|
|  1|
|  2|
|  3|
|  4|
|  5|
|  6|
|  7|
|  8|
|  9|
+---+




scala> res2.show()
+---+---+
| id| bb|
+---+---+
|  0|  0|
|  1|  0|
|  2|  0|
|  3|  0|
|  4|  0|
|  5|  0|
|  6|  0|
|  7|  0|
|  8|  0|
|  9|  0|
+---+---+




scala> res2.withColumn("cc",col("id")*0)
res5: org.apache.spark.sql.DataFrame = [id: bigint, bb: bigint, cc: bigint]


scala> res3.show()
<console>:30: error: value show is not a member of Unit
              res3.show()
                   ^


scala> res5.show()
+---+---+---+
| id| bb| cc|
+---+---+---+
|  0|  0|  0|
|  1|  0|  0|
|  2|  0|  0|
|  3|  0|  0|
|  4|  0|  0|
|  5|  0|  0|
|  6|  0|  0|
|  7|  0|  0|
|  8|  0|  0|
|  9|  0|  0|
+---+---+---+

### 如何在 Spark 中使用 `struct` 函数 #### 示例代码 为了创建结构化列,在 Spark SQL 中可以利用 `struct` 函数组合多个现有列为一个新的复合类型(即 StructType)。下面是一个简单的例子展示如何构建这样的结构体并将其加入到 DataFrame 的新列中。 ```scala import org.apache.spark.sql.functions.struct // 假设有一个名为 df 的 DataFrame,其中包含两列 "firstName" 和 "lastName" val combinedNameDf = df.withColumn("fullName", struct($"firstName", $"lastName")) ``` 这段代码会生成一个新的 DataFrame (`combinedNameDf`) ,它包含了原始的所有列以及新增一列叫做 `"fullName"` 。这列的数据是由原来的 `"firstName"` 和 `"lastName"` 组合而成的一个结构体对象[^2]。 #### 语法说明 `struct` 函数接受可变数量的参数列表作为输入,这些参数代表想要打包成单个结构类型的各个字段。每个字段既可以是指定名称的列也可以是表达式的结果。当调用此方法时,将会返回一个表示该复杂数据类型的 Column 对象[^3]。 #### 结构体的操作 一旦有了含有结构体的 DataFrame 后,则可以通过点号运算符来获取特定成员变量。比如上面的例子中如果想单独提取出全名里的姓氏部分就可以这样做: ```scala combinedNameDf.select("fullName.lastName").show() ``` 上述命令会选择所有记录里由 `struct` 创建出来的 `fullName` 字段下的子字段 `lastName` 并显示出来[^1]。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值