我有两个RDD:
因此,对于RDD2中的每个“id”,我想计算文本中每个单词的平均分数,如果它有分数的话
def predecir(texto):
contador = 0
prediccion = 0
for palabra in texto:
puntaje = listaRDD.lookup(palabra)
if puntaje:
puntaje = puntaje[0]
prediccion += puntaje
contador += 1
return (float(prediccion)/ contador)
listaTestRDD = listaTestRDD.map(lambda x: (x[0], predecir(x[1])))
print listaTestRDD.take(1)
我收到了这个错误信息
异常:似乎您正试图广播RDD或从操作或转换引用RDD。RDD转换和操作只能由驱动程序调用,不能在其他转换内部调用;例如,rdd1.map(lambda x:rdd2.values.count()*x)无效,因为值转换和计数操作不能在rdd1.map转型。有关详细信息,请参阅SPARK-5063。
我怎样才能解决它?我不能用两个RDD,一个在另一个里面?如何将RDD1转换为字典,以便在O(1)中查找单词?
尝试:
RDD2.flatMapValues(lambda x: x) \
.map(lambda x: (x[1], x[0])) \
.leftOuterJoin(RDD1) \
.values() \
.map(lambda x: (x[0], (x[1], 1) if x[1] is not None else (0, 0))) \
.reduceByKey(lambda x, y: (x[0] + y[0], x[1] + y[1])) \
.mapValues(lambda x: x[0] / float(x[1]) if x[1] else 0.0)
我通读了地图和地图分区之间的理论差异, 但我下面描述的问题更多地基于GC活动 = = 提前感谢。任何帮助都将不胜感激。
问题内容: [‘a’,’a’,’b’,’c’,’c’,’c’] 至 和 问题答案: x=[‘a’,’a’,’b’,’c’,’c’,’c’] >>> map(x.count,x) [2, 2, 1, 3, 3, 3] >>> dict(zip(x,map(x.count,x))) {‘a’: 2, ‘c’: 3, ‘b’: 1} >>>
下午好: 我最近创建了一个类“X”,它包含一个单一属性“network”,定义为一个映射,使用字符串作为键,另一个映射作为值(double map)。对于此类,将使用“hashmap”实现。 该类大致如下所示: 但是,当我执行函数中包含的network.put指令时,编译器会自动检测到一个错误:“表达式预期”。如果可能,我想知道在向映射中添加新的键值元素时是否使用了错误的语法,或者是否是映射的初始
我需要将Java转换为的实例(包括映射内容) 我应该用什么来代替来使此代码可编译?
下面是Main中的随机客户端列表 第二类:产品(字符串名称、枚举类别、BigDecimal价格) 目标->预期结果:在类Main中,创建类Shopping的实例,其中属性是具有 的映射,并用随机数据//integer-购买了多少产品 null null
我刚刚开始看Java8,为了尝试lambdas,我想我应该尝试重写我最近写的一个非常简单的东西。我需要将一个字符串到列的映射转换为另一个字符串到列的映射,其中新映射中的列是第一个映射中列的防御副本。列具有复制构造函数。到目前为止我得到的最接近的数据是: 但我相信一定有更好的方法来做这件事,我会很感激一些建议。