Pypark广播变量联接

2024-09-27 09:29:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在执行一个连接,我有超过100个节点的数据。所以我有一个小的键/值列表,我正在与另一个键/值对连接。在

我的清单是这样的:

[[1, 0], [2, 0], [3, 0], [4, 0], [5, 0], [6, 0], [7, 0], [8, 0], [9, 0], [10, 0], [11, 0], [16, 0], [18, 0], [19, 0], [20, 0], [21, 0], [22, 0], [23, 0], [24, 0], [25, 0], [26, 0], [27, 0], [28, 0], [29, 0], [36, 0], [37, 0], [38, 0], [39, 0], [40, 0], [41, 0], [42, 0], [44, 0], [46, 0]]

我有广播变量:

^{pr2}$

当我加入时:

numRDD = columnRDD.join(numB.value)

我得到以下错误:

AttributeError: 'list' object has no attribute 'map'

Tags: 数据no列表节点objectvalue错误list
3条回答

你能不能试着把numValuesKV做成字典,看看它能不能用。在

你正在广播一份名单,这是绝对可以的。在

你需要做的是

b=sc.broadcast(lst)
rdd.map(lambda t: t if t[0] in b.value)

这里的t[0]应该看起来像[1,0]等等,但我希望你能理解。。。。在

rdd.join(other)意味着连接两个RDD,因此它期望other是一个RDD。要使用高效的“小表广播”连接技巧,您需要“手动”进行连接。在Scala中,它看起来像这样:

rdd.mapPartitions{iter =>
    val valueMap = numB.value.toMap
    iter.map{case (k,v) => (k,(v,map(v))}
}

这将使用广播值的连接以分布式方式应用到RDD的每个分区。在

PySpark代码应该非常相似。在

相关问题 更多 >

    热门问题