如何根据 Pyspark 中的单元格值重命名列?

How can I rename a column based on a cell value in Pyspark?

目前我的情况是:

   signal_name  timestamp   signal_value
0  alert        1632733513  on
1  alert        1632733515  off
2  alert        1632733518  on

我想用 signal_name 重命名列 signal_value。 df 在信号名称 alert 之后被过滤,因此 signal_name.

没有其他值
   signal_name  timestamp   alert
0  alert        1632733513  on
1  alert        1632733515  off
2  alert        1632733518  on

由于信号名称已寻址,因此不再需要第一列。所以我想放弃它。

   timestamp    alert
0  1632733513   on
1  1632733515   off
2  1632733518   on

由于有多个df(基于其他signal_name)出现这个问题,所以这个方法应该是通用的。

如果您控制在 signal_name 上过滤数据框的部分,那么您可以使用过滤器中使用的相同值重命名该列。

否则,您可以 select 将 signal_name 列的第一个值放入 python 变量中,然后使用它来重命名该列 signal_value:

data = [("alert", "1632733513", "on"), ("alert", "1632733515", "off"), ("alert", "1632733518", "on")]
df = spark.createDataFrame(data, ["signal_name", "timestamp", "signal_value"])

signal_name = df.select("signal_name").first().signal_name

df1 = df.withColumnRenamed("signal_value", signal_name).drop("signal_name")

df1.show()

# +----------+-----+
# | timestamp|alert|
# +----------+-----+
# |1632733513|   on|
# |1632733515|  off|
# |1632733518|   on|
# +----------+-----+