我想根据条件从列表的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]
答案 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()