[pyspark] pyspark中如何修改列名字

使用 .withColumnRenamed 来重命名,直接看demo:

python 复制代码
from pyspark.sql import SparkSession

spark = SparkSession.builder.appName("example").getOrCreate()

data = [
    ("Alice", 1, 200),
    ("Bob", 2, 300),
    ("Charlie", 3, 400),
]

columns = ["name", "old_col1", "old_col2"]
df = spark.createDataFrame(data=data, schema=columns)
df.show()
'''
+-------+--------+--------+                                                     
|   name|old_col1|old_col2|
+-------+--------+--------+
|  Alice|       1|     200|
|    Bob|       2|     300|
|Charlie|       3|     400|
+-------+--------+--------+
'''

df_rename = df.withColumnRenamed("old_col1", "new_col1").withColumnRenamed(
    "old_col2", "new_col2"
)
df_rename.show()
'''
+-------+--------+--------+
|   name|new_col1|new_col2|
+-------+--------+--------+
|  Alice|       1|     200|
|    Bob|       2|     300|
|Charlie|       3|     400|
+-------+--------+--------+
'''

这个 .withColumnRenamed.withColumn 二者有什么不同呢?

1. df.withColumn

withColumn 方法用于向 DataFrame 中添加一个新列或替换现有列。

这个方法需要两个参数:新列的名称和一个 Column 表达式,该表达式定义了新列的值。如果新列的名称已经存在于 DataFrame 中,那么该列将被替换

python 复制代码
from pyspark.sql import SparkSession
from pyspark.sql.functions import lit

spark = SparkSession.builder.appName("example").getOrCreate()

data = [("Alice", 1), ("Bob", 2), ("Charlie", 3)]
columns = ["name", "age"]
df = spark.createDataFrame(data=data, schema=columns)

# 使用 withColumn 添加一个新列
df_with_new_column = df.withColumn("new_column", lit("constant_value"))

# 使用 withColumn 替换现有列
df_replaced_column = df.withColumn("age", df["age"] * 2)  # 将 age 列的值翻倍

df_with_new_column.show()
df_replaced_column.show()

2. df.withColumnRenamed

withColumnRenamed 方法专门用于重命名 DataFrame 中的现有列。它接受两个参数:要重命名的列的当前名称和新名称。

python 复制代码
from pyspark.sql import SparkSession

spark = SparkSession.builder.appName("example").getOrCreate()

data = [("Alice", 1), ("Bob", 2), ("Charlie", 3)]
columns = ["name", "age"]
df = spark.createDataFrame(data=data, schema=columns)

# 使用 withColumnRenamed 重命名列
df_renamed = df.withColumnRenamed("age", "years_old")

df_renamed.show()

3. 区别与联系

1. 区别:
  • withColumn 可以添加新列或替换现有列,而 withColumnRenamed 仅用于重命名现有列。
  • withColumn 需要一个 Column 表达式来定义新列的值,而 withColumnRenamed 只需要新列的名称。
2. 联系:
  • 两者都是 DataFrame 的转换操作,返回一个新的 DataFrame,而不修改原始 DataFrame。
  • 两者都可以用于修改 DataFrame 的结构,即列的组成。
  • 在某些情况下,你可以通过组合使用这两个方法来实现更复杂的列操作。例如,你可以先使用 withColumn 添加一个新列,然后使用 withColumnRenamed 来重命名它。
相关推荐
不辉放弃14 天前
Apache Flink 的详细介绍
数据库·flink·pyspark·大数据开发
不辉放弃15 天前
pyspark中的kafka的读和写案例操作
大数据·数据库·pyspark·大数据开发
不辉放弃15 天前
Spark SQL 的 SQL 模式和 DSL模式
数据库·pyspark·大数据开发
不辉放弃16 天前
Apache Spark 的结构化流
大数据·数据库·pyspark·伪实时
@十八子德月生16 天前
第三阶段—8天Python从入门到精通【itheima】-143节(pyspark实战——数据计算——flatmap方法)
大数据·开发语言·python·数据分析·pyspark·好好学习,天天向上·question answer
不辉放弃19 天前
Spark SQL 的详细介绍
数据库·pyspark·大数据开发·sparksql
不辉放弃21 天前
Spark的宽窄依赖
大数据·数据库·pyspark
不辉放弃22 天前
kafka的消息存储机制和查询机制
数据库·kafka·pyspark·大数据开发
不辉放弃1 个月前
kafka的shell操作
数据库·kafka·pyspark·大数据开发
不辉放弃1 个月前
spark on yarn
pyspark·大数据开发