gpt4 book ai didi

python - 从另一个 RDD 的映射内的 RDD 查找

转载 作者:太空宇宙 更新时间:2023-11-03 16:00:12 24 4
gpt4 key购买 nike

我有2个RDD:

  • RDD1 = (单词, 分数) #单词: 字符串 |分数:整数
  • RDD2 = (id, 文本) #id: int |文本:单词列表

因此,对于 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)

我收到此错误消息

Exception: It appears that you are attempting to broadcast an RDD or reference an RDD from an action or transformation. RDD transformations and actions can only be invoked by the driver, not inside of other transformations; for example, rdd1.map(lambda x: rdd2.values.count() * x) is invalid because the values transformation and count action cannot be performed inside of the rdd1.map transformation. For more information, see SPARK-5063.

我该如何解决?我不能在另一个 RDD 中使用两个 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)

关于python - 从另一个 RDD 的映射内的 RDD 查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40387833/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com