PySpark DataFrame列前两行删除失败,求原因及解决方案
问题原因分析
- 你用错了PySpark的
drop()函数:这个函数的作用是删除DataFrame中的列,不是删除行。你写的drop(*[str(i) for i in range(2)])是试图删除名为"0"和"1"的列,但你的DataFrame只有tokenized_text这一列,所以这个操作完全没起作用,行数自然还是3行。
解决方案
下面提供两种实用方法删除DataFrame的前两行:
方法1:用窗口函数标记行号后过滤
通过给每行分配行号,过滤掉行号≤2的行即可:
from pyspark.sql import Window from pyspark.sql.functions import row_number, lit # 定义窗口(如果有业务需要的排序字段,替换掉lit(1),否则行号顺序可能不稳定) window_spec = Window.orderBy(lit(1)) # 添加行号列、过滤、删除辅助列 df_filtered = df.withColumn("row_id", row_number().over(window_spec)) \ .filter("row_id > 2") \ .drop("row_id") # 验证结果 df_filtered.count() # 结果应为1
方法2:Spark 3.0+ 直接用skip()
如果你的Spark版本是3.0及以上,可以直接用skip()跳过指定行数:
df_filtered = df.skip(2) # 验证结果 df_filtered.count() # 结果应为1
补充:原始DataFrame创建的小问题
你提供的示例数据里第一行是tuple,后面两行是list,会导致类型不一致,建议统一改成列表:
data = [["This", "is", "a", "sample", "sentence"], ["Another", "example", "sentence", "here"], ["One", "more", "sentence"]] df = spark.createDataFrame(data, ["tokenized_text"])
内容的提问来源于stack exchange,提问作者Asmita
相关产品推荐
相关产品推荐

