首页 文章

PySpark DataFrames:过滤某些值在数组列中

提问于
浏览
0

我在PySpark中有一个DataFrame,它的一个字段有一个嵌套数组值 . 我想过滤数组中包含某个字符串的DataFrame . 我没有看到我能做到这一点 .

架构如下所示: root |-- name: string (nullable = true) |-- lastName: array (nullable = true) | |-- element: string (containsNull = false)

我想返回 upper(name) == 'JOHN'lastName 列(数组)包含 'SMITH' 的所有行,并且相等应该不区分大小写(就像我为名称所做的那样) . 我在列值上找到了 isin() 函数,但这似乎与我想要的相反 . 看起来我需要一个列值的 contains() 函数 . 任何人都有任何想法直截了当地做到这一点?

1 回答

  • 2

    您可以考虑直接处理底层RDD .

    def my_filter(row):
        if row.name.upper() == 'JOHN':
            for it in row.lastName:
                if it.upper() == 'SMITH':
                    yield row
    
    dataframe = dataframe.rdd.flatMap(my_filter).toDF()
    

相关问题