【问题标题】:Dropping rows from a spark dataframe based on a condition根据条件从 spark 数据框中删除行
【发布时间】: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]

【问题讨论】:

标签: 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]|
+---------+------------------+

【讨论】:

    猜你喜欢
    • 2018-06-04
    • 2022-10-14
    • 2019-07-27
    • 1970-01-01
    • 1970-01-01
    • 2019-02-23
    • 2015-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多