PySpark DataFrame行删除与值替换技术咨询
嘿,我来帮你搞定这两个PySpark DataFrame的操作问题~
一、利用获取的ID删除目标行
你已经通过collect()拿到了目标ID的Row列表[Row(id='382')],首先得把里面的实际ID值提取出来,因为直接用Row对象没法直接做过滤:
# 提取ID字符串 id_to_delete = ID[0]['id']
接下来有两种常用方法删除对应行:
方法1:使用filter反选
直接过滤掉id等于目标值的行,注意PySpark DataFrame是不可变的,操作后要把结果赋值给新的DataFrame:
new_df = df.filter(df["id"] != id_to_delete)
方法2:使用exceptAll(适合批量删除场景)
如果后续有多个ID要删,这种方法更灵活。先把要删除的ID做成一个小的DataFrame,再用exceptAll排除目标行:
from pyspark.sql import Row # 创建包含要删除ID的DataFrame delete_ids_df = spark.createDataFrame([Row(id=id_to_delete)]) # 排除目标行 new_df = df.exceptAll(df.join(delete_ids_df, on="id"))
二、替换DataFrame中的特定值
根据替换范围的不同,有两种常见操作:
1. 替换某一列的特定值
用when和otherwise组合,精准替换某列的目标值:
from pyspark.sql.functions import when # 把name列中的"Bruce"替换成"Bruce Wayne" updated_df = df.withColumn("name", when(df["name"] == "Bruce", "Bruce Wayne").otherwise(df["name"]))
2. 替换全表所有列的特定值
如果想替换整个DataFrame中所有出现的某个值(比如把所有"382"换成"999"),可以用replace函数:
# 替换全表中所有的"382"为"999" updated_df = df.replace("382", "999") # 也可以指定只替换某几列的特定值 updated_df = df.replace("Bruce", "Bruce Wayne", subset=["name"])
内容的提问来源于stack exchange,提问作者moirK
相关产品推荐
相关产品推荐

