【发布时间】:2016-04-17 06:44:30
【问题描述】:
这是我的数据示例:
data1 = [[ 'red blue hi you red' ],
[ 'ball green ball go four ball'],
[ 'nice red start nice' ],
[ 'ball no kill tree go go' ]]
从之前的数据中得到如下:
data2 =
[[[ 'red', 2 ], [ 'blue', 1 ], [ 'hi', 1 ], [ 'you', 1 ]],
[[ 'green', 1 ], [ 'go', 1 ], [ 'four', 1 ], [ 'ball', 3 ]],
[[ 'red, 1 ], [ 'start', 1 ], [ 'nice', 2 ]],
[[ 'ball', 1 ], [ 'no', 1 ], [ 'kill', 1 ], [ 'tree', 1 ], [ 'go', 2 ]]]
注意:请注意,RDD 数据 2 的嵌套列表包含该词在 RDD 数据 1 的每个元素中被提及的次数 我想要的是应用以下代码:
data3 = data2.map(lambda x: [data1.filter(lambda z: y[0] in z) for y in x])
输出应该是 data1 中包含给定单词的列表或元素。 例如:如果“红色”这个词传递给循环然后过滤,它应该给我 2 个来自 data1 的列表,它们是:
[ 'red blue hi you red' ]
[ 'nice red start nice' ]
但它总是给出以下错误:
例外:您似乎正在尝试广播 RDD 或从操作或转换中引用 RDD。 RDD 转换和动作只能由驱动程序调用,不能在其他转换内部调用;例如,rdd1.map(lambda x: rdd2.values.count() * x) 无效,因为值转换和计数操作无法在 rdd1.map 转换内部执行。有关详细信息,请参阅 SPARK-5063。
我尝试了另一种方式,即定义一个函数,然后将其传递到转换映射中,例如:
def func(y)
data1.filter(lambda z: y[0] in z)
data3 = data2.map(lambda x: [ func(y) for y in x])
但它仍然是同样的错误,显然试图变得聪明是行不通的:3 我能做些什么?提前致谢。
【问题讨论】:
标签: python lambda nested pyspark map-function