[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 来重命名它。
相关推荐
唯余木叶下弦声18 天前
Spark区分应用程序 Application、作业Job、阶段Stage、任务Task
大数据·spark·pyspark
唯余木叶下弦声1 个月前
PySpark3:pyspark.sql.functions常见的60个函数
python·spark·pyspark
出发行进1 个月前
Spark的yarn集群环境搭建
大数据·linux·分布式·spark·pyspark
天冬忘忧2 个月前
PySpark 本地开发环境搭建与实践
spark·conda·pyspark
songqq272 个月前
【快速上手】pyspark 集群环境下的搭建(Yarn模式)
大数据·spark·pyspark
尘世壹俗人2 个月前
PySpark任务提交
大数据·pyspark
出发行进2 个月前
Spark学习
大数据·linux·python·数据分析·spark·centos·pyspark
百流2 个月前
Pyspark中pyspark.sql.functions常用方法(3)(array操作)
linux·python·spark·pyspark·1024程序员节
百流2 个月前
Pyspark中pyspark.sql.functions常用方法(2)(时间函数)
数据库·python·spark·pyspark·dataframe