根据条件从 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 数据框中删除行的主要内容,如果未能解决你的问题,请参考以下文章