我至今是:打开RDD到广播词典查找
lookup = sc.textFile("/user/myuser/lookup.asv")
lookup.map(lambda r: r.split(chr(1)))
而且现在我有一个RDD看起来像
[
[filename1, category1],
[filename2, category2],
...
[filenamen, categoryn]
]
我怎样才能把这一RDD成广播字典一样:
{filename1: category1, filename2: category2, ...}
这是我试过,但没有工作:
>>> broadcastVar = sc.broadcast({})
>>> data = sc.parallelize([[1,1], [2,2], [3,3], [4,4]])
>>> def myfunc(x):
... broadcastVar[str(x[0])] = x[1]
...
>>> result = data.map(myfunc)
>>> broadcastVar
<pyspark.broadcast.Broadcast object at 0x7f776555e710>
>>> broadcastVar.value
{}
>>> result.collect()
...
ERROR: TypeError: 'Broadcast' object does not support item assignment
...
>>> broadcastVar.value
{}
有关为什么我建立这个巨大的查找变量的更多信息,请阅读本:
这是本one的后续问题。
我有两个表,其中
表1:其中各列包含该像素信息和第一列中的非常宽(25K列和150K行)表是输入图象文件的文件名。
表2:TSV(制表符分隔文件)文件,有300万行,每行包含图像文件名称和图像的产品类别。
在SQL中,我需要在文件名的这两个表上做一个内部连接,这样我就可以为图像数据添加标签,以便稍后进行机器学习。
在任何类型的SQL中执行它是不现实的,因为您必须为table1创建一个具有25K列的表,而create table语法将会很荒谬。
然后我想创建一个使用table2的查找变量,也许使它成为一个广播变量,其中的关键是文件名,值是产品类别。