У меня есть два списка, как показано ниже
l=[['A', 'B', 'C'], ['A', 'C'], ['A', 'B', 'C'], ['A', 'B'],['B','C'],['B']]
x=[('A', 'B'), ('A', 'C')]
Я хочу удалить из списка списков l
все элементы, которые не содержат все элементы ни в одном из tuple
sв списке x
.Другими словами, должен быть хотя бы один tuple
в x
, для которого все элементы, которые соответствуют кортежу, присутствуют в элементах l
.
На основе моего последнего вопроса, мне было дано следующее решение в python:
print([l_ for l_ in l if any(all(e in l_ for e in x_) for x_ in x)])
, которое дает желаемый результат:
[['A', 'B', 'C'], ['A', 'C'], ['A', 'B', 'C'], ['A', 'B']]
Теперь я пытаюсь повторить ту же операцию с pysparkrdd
, но я не получаю ожидаемого результата.
Вот что я пытался:
rddsort=sc.parallelize(l)
broadcastVar = sc.broadcast(x)
def flist(unique_product_List,x):
filter_list = [
l_ for l_ in unique_product_List
if any(all(e in l_ for e in x_) for x_ in x)
]
return filter_list
rddsort=rddsort.map(lambda flist(x[0],broadcastVar.value))
print(rddsort.collect())
В результате я получаю список пустых списков:
[[], [], [], [], [], []]
Но мой ожидаемый результат должен быть таким жекак указано выше.