0
我在pyspark的關鍵價值地圖上苦於基本操作。以下是問題描述:如何根據鍵值映射中兩個不同鍵的條件組合值?
data = {(1, [2, 3, 4]), (2, [a, b, 3]), (3, [x, y]) }
我想獲取所有未包含在當前值列表中的鍵的值。結果應該是這樣的:
data = {(1, [a, b, x, y]), (2, [x, y]), (3, []) }
之前甚至過濾的結果,我只是想價值觀結合起來,有幾個方法:
- 將數據發送到一個功能,並創建嵌套的循環轉換成數據:失敗,因爲我不能讓我的RDDS使用地圖通過數據迭代正常
- 迭代:
data.map(lambda x: (x[0], x[1].map(lambda a,b: (x[a] + x[b])))):
失敗,因爲該名單沒有map
或flatMap
屬性 - 利用價值圖法:
data.flatMapValues(lambda a, b: (data.lookup(a) + data.lookup(b))).
順便說一句,我是完全新的pyspark所以我的方法可能是天真的,但有沒有辦法讓這些工作還是有,我應該使用不同的方法?
感謝您的回覆!我試過你的方法,看來set對象沒有屬性collect:AttributeError:'set'對象沒有屬性'collect'。有沒有其他方法可以打印出我們的價值?另外,第二個也有類似的問題,我遇到過:f(self,obj)#使用明確的自我調用未綁定方法 「看起來您正試圖廣播RDD或引用RDD」 – shake
如果我這樣做:values2 = sc.broadcast(values)和data.mapValues(lambda x:[y for y in values in if if y not in x])。collect()。我收到一個錯誤,說明廣播對象不可迭代。 – shake
糟糕...你可以跳過「收集」步驟 - 減少照顧它。 檢查文檔,但我認爲它應該是'values2.value'來訪問廣播變量的實際值(也許我不應該稱它爲值...)。 – hoyland