根据条件从 spark 数据框中删除行

Posted

技术标签:

【中文标题】根据条件从 spark 数据框中删除行【英文标题】:Dropping rows from a spark dataframe based on a condition 【发布时间】:2019-04-30 08:23:45 【问题描述】:

我想根据条件从列表的 spark 数据框中删除行。条件是列表的长度为一定长度。

我尝试将其转换为列表列表,然后使用 for 循环(如下所示),但我希望在 spark 中的一个语句中执行此操作,并基于此从原始 df 创建一个新的不可变 df条件。

newList = df2.values.tolist()

finalList = []

for subList in newList:
    if len(subList) < 4:
        finalList.append(subList)


因此,例如,如果数据框是单列数据框并且该列被命名为序列,它看起来像:

sequences
____________
[1, 2, 4]
[1, 6, 3]
[9, 1, 4, 6]

我想删除列表长度大于 3 的所有行,结果是:

sequences
____________
[1, 2, 4]
[1, 6, 3]

【问题讨论】:

Remove rows from dataframe based on condition in pyspark的可能重复 【参考方案1】:

这是 Spark >= 1.5 中使用内置 size 函数的一种方法:

from pyspark.sql import Row
from pyspark.sql.functions import  size

df = spark.createDataFrame([Row(a=[9, 3, 4], b=[8,9,10]),Row(a=[7, 2, 6, 4], b=[2,1,5]), Row(a=[7, 2, 4], b=[8,2,1,5]), Row(a=[2, 4], b=[8,2,10,12,20])])

df.where(size(df['a']) <= 3).show()

输出:

+---------+------------------+
|        a|                 b|
+---------+------------------+
|[9, 3, 4]|        [8, 9, 10]|
|[7, 2, 4]|      [8, 2, 1, 5]|
|   [2, 4]|[8, 2, 10, 12, 20]|
+---------+------------------+

【讨论】:

以上是关于根据条件从 spark 数据框中删除行的主要内容,如果未能解决你的问题,请参考以下文章

如何根据条件表达式从熊猫数据框中删除行[重复]

如何根据条件表达式从熊猫数据框中删除行[重复]

有没有一种方法可以根据条件从数据框中删除行?

如何根据自定义逻辑在 spark 数据框中删除重复行?

按日期范围删除数据框中的行。

Spark SQL 使用窗口 - 根据列条件从当前行之后的行中收集数据