【问题标题】:How do I select columns from a Spark dataframe when I also need to use withColumnRenamed?当我还需要使用 withColumnRenamed 时,如何从 Spark 数据框中选择列?
【发布时间】:2018-09-11 22:08:49
【问题描述】:

我有一个数据框

df = df.select("employee_id", "employee_name", "employee_address")

我需要重命名前两个字段,但仍然选择第三个字段。所以我认为这会起作用,但这似乎只选择employee_address

df = (df.withColumnRenamed("employee_id", "empId")
        .withColumnRenamed("employee_name", "empName")
        .select("employee_address")
)

如何在选择第三个字段的同时正确重命名前两个字段?

我尝试了多种withColumn 用法,但都不起作用。我必须在所有三个字段上都使用选择吗?

【问题讨论】:

  • 请记住,如果您想选择所有列,也可以使用select("*")

标签: pyspark pyspark-sql


【解决方案1】:

您可以使用alias 命令:

import pyspark.sql.functions as func

df = df.select(
    func.col("employee_id").alias("empId"), 
    func.col("employee_name").alias("empName"), 
    func.col("employee_address")
)

【讨论】:

  • 你将如何使用withColumn 函数来做到这一点?我必须在哪里包含一个空字段,例如.withColumn('employee_birthdate', func.lit(None).cast(StringType())) 任何干净的方法可以做到这一点?我的做法看起来有点丑,但我想不出更好的方法
  • 您不需要withColumn,您只需在select 语句中添加另一列:func.lit(None).cast(StringType()).alias("employee_address") 将添加名为employee_address 的第四列,其中将包含所有null值。
猜你喜欢
  • 1970-01-01
  • 2019-07-17
  • 1970-01-01
  • 2012-06-21
  • 1970-01-01
  • 2021-03-01
  • 2018-08-08
  • 2019-03-04
  • 1970-01-01
相关资源
最近更新 更多