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

时间:2019-04-30 08:23:45

标签: pyspark

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

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

newList = df2.values.tolist()

finalList = []

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


例如,如果数据框是一列数据框,并且该列被命名为sequence,则它看起来像:

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

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

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

1 个答案:

答案 0 :(得分:1)

这是使用内置motorCycle函数的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()