我至今是:打開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的查找變量,也許使它成爲一個廣播變量,其中的關鍵是文件名,值是產品類別。