Как отфильтровать значения внутри списка списков в pyspark - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть 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])

Однако полученный СДР пуст, и я не знаю почему, что-то мне не хватает в состоянии, которое я сделал?

1 Ответ

1 голос
/ 24 апреля 2020

Для 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 any list inside a list, который содержит слово 'vedea', вы можете использовать filter и array_contains

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]]|
#+---------------------------------------------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...