Apache spark 错误-pyspark与嵌套列表和列表RDD相交

Apache spark 错误-pyspark与嵌套列表和列表RDD相交,apache-spark,pyspark,Apache Spark,Pyspark,我在RDD中有一个列表和一个要相交的列表。B需要与A中的每个列表交互 A = [[a,b,c,d],[e,f,g,h]....] B = [a,b,c,d,e,f,g,h] 我需要将这两个相交以得到共同的字母。我使用了以下内容,但由于typeError而出错 pwords = A.intersection(B) 然后,基于对stackoverflow的一些建议,我尝试使用parallelize,但出现了一个错误 text_words = sc.parallelize(A) Traceback

我在RDD中有一个列表和一个要相交的列表。B需要与A中的每个列表交互

A = [[a,b,c,d],[e,f,g,h]....]
B = [a,b,c,d,e,f,g,h]
我需要将这两个相交以得到共同的字母。我使用了以下内容,但由于typeError而出错

pwords = A.intersection(B)
然后,基于对stackoverflow的一些建议,我尝试使用parallelize,但出现了一个错误

text_words = sc.parallelize(A)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/spark/python/pyspark/context.py", line 501, in 
parallelize
c = list(c)    # Make it a list so we can compute its length
TypeError: 'PipelinedRDD' object is not iterable
TypeError: 'PipelinedRDD' object is not iterable 
我尝试跟踪,但出现以下错误:

TypeError: 'PipelinedRDD' object is not iterable

我不是100%确定你的问题,但我猜你有一个嵌套列表作为RDD,并希望与静态列表B相交。然后,嵌套列表中的每个项目都应该在B中检查是否存在,如果存在,则应该保留

如果元素的顺序无关紧要,则可以使用以下代码:

A=[“A”、“b”、“c”、“d”]、[“e”、“f”、“g”、“h”]、[“i”、“j”、“k”、“l”]、[“A”、“b”、“x”、“f”、“y”]
B=[“a”、“B”、“c”、“d”、“e”、“f”、“g”、“h”]
text_words=sc.parallelize(A)
text_words.map(lambda x:list(set(x)和set(B))).collect()
输出:

[['a', 'c', 'b', 'd'], ['h', 'e', 'g', 'f'], [], ['a', 'b', 'f']]

嵌套列表和列表都是RDD。当我使用sc.parallelize时,正如您所提到的。我得到了一个描述中提到的错误。因为看起来你的嵌套列表A已经是一个流水线rdd,这就是为什么你得到了错误并且不能并行化它。正如您在我的代码中所看到的,如果您只是创建嵌套列表,它会很好地工作是的,它们都是RDD,但是当我尝试按照您的建议使用map函数时,我收到以下错误:----pickle.PicklingError:无法序列化对象:异常:似乎您正试图广播RDD或引用操作或转换中的RDD。RDD转换和操作只能由驱动程序调用,不能在其他转换内部调用;例如,rdd1.map(lambda x:rdd2.values.count()*x)无效,因为无法在rdd1.map转换内执行值转换和计数操作。有关更多信息,请参阅SPARK-5063。这听起来像是
A
已经是RDD,您不需要对其执行
并行化
。您可以直接使用
A
。是的,我没有使用parallelize。即使我只使用map函数,我也会得到上面评论中提到的错误。