[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 来重命名它。
相关推荐
唯余木叶下弦声12 天前
PySpark之金融数据分析(Spark RDD、SQL练习题)
大数据·python·sql·数据分析·spark·pyspark
积跬步,慕至千里13 天前
Windows环境本地配置pyspark环境详细教程
windows·python·pyspark
唯余木叶下弦声2 个月前
Spark区分应用程序 Application、作业Job、阶段Stage、任务Task
大数据·spark·pyspark
唯余木叶下弦声2 个月前
PySpark3:pyspark.sql.functions常见的60个函数
python·spark·pyspark
出发行进3 个月前
Spark的yarn集群环境搭建
大数据·linux·分布式·spark·pyspark
天冬忘忧3 个月前
PySpark 本地开发环境搭建与实践
spark·conda·pyspark
songqq273 个月前
【快速上手】pyspark 集群环境下的搭建(Yarn模式)
大数据·spark·pyspark
尘世壹俗人3 个月前
PySpark任务提交
大数据·pyspark
出发行进3 个月前
Spark学习
大数据·linux·python·数据分析·spark·centos·pyspark