如何在pyspark中筛选出列表列表中的值

2024-05-13 04:12:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含如下行的rdd

[(0, (['componenţa', 'parlamentului:', 'a', 'se', 'vedea', 'procesul-verbal'], ['membership', 'of', 'parliament:', 'see', 'minutes']))]

我尝试使用以下方法过滤掉包含单词“vedea”的数据对象:

Index_Comb=Index_Ro.join(Index_En).reduceByKey(lambda x,y:x+y)\ # Joining two RDDs into one
                                  .filter(lambda x : "vedea" not in x[1])

然而,结果RDD是空的,我不知道为什么,在我所做的条件中是否有我缺少的东西


Tags: of方法lambdaindexmembershiprddseese
1条回答
网友
1楼 · 发布于 2024-05-13 04:12:21

对于spark2.4,使用Dataframes,可以使用高阶函数transform and filter对数组或其他嵌套数据结构进行过滤

#sample dataframe
df.show()
+                                                     +
|list                                                                                                      |
+                                                     +
|[[componenţa, parlamentului:, a, se, vedea, procesul-verbal], [membership, of, parliament:, see, minutes]]|
+                                                     +

df.withColumn("list", F.expr("""transform(list,x-> filter(x, y-> y!='vedea'))""")).show(truncate=False)

+                                                 -+
|list                                                                                               |
+                                                 -+
|[[componenţa, parlamentului:, a, se, procesul-verbal], [membership, of, parliament:, see, minutes]]|
+                                                 -+

在这种情况下,如果您想要remove{}{}包含单词'vedea',您可以使用filter{}

from pyspark.sql import functions as F
df.withColumn("list",\
F.expr("""filter(list,x-> array_contains(x,'vedea')!=True)""")).show(truncate=False)
#+                      -+
#|list                                         |
#+                      -+
#|[[membership, of, parliament:, see, minutes]]|
#+                      -+

相关问题 更多 >