1
這裏有一個嵌套的轉變是我的數據的一個例子:獲得從以前的數據如下我怎麼能在PySpark
data1 = [[ 'red blue hi you red' ],
[ 'ball green ball go four ball'],
[ 'nice red start nice' ],
[ 'ball no kill tree go go' ]]
:
data2 =
[[[ 'red', 2 ], [ 'blue', 1 ], [ 'hi', 1 ], [ 'you', 1 ]],
[[ 'green', 1 ], [ 'go', 1 ], [ 'four', 1 ], [ 'ball', 3 ]],
[[ 'red, 1 ], [ 'start', 1 ], [ 'nice', 2 ]],
[[ 'ball', 1 ], [ 'no', 1 ], [ 'kill', 1 ], [ 'tree', 1 ], [ 'go', 2 ]]]
注:注意到RDD DATA2有嵌套列表包含RDD數據中每個元素中提及該詞的次數1 我想要的是應用以下代碼:
data3 = data2.map(lambda x: [data1.filter(lambda z: y[0] in z) for y in x])
輸出應該是包含給定單詞的data1中的列表或元素。 例如:如果單詞「紅色」傳遞給循環然後過濾,就應該給我的數據1 2所列出它們是:
[ 'red blue hi you red' ]
[ 'nice red start nice' ]
但它一直給以下錯誤:
例外:它似乎您正嘗試廣播RDD或引用操作或轉換中的RDD。 RDD轉換和操作只能由驅動程序調用,而不能在其他轉換中調用;例如,rdd1.map(lambda x:rdd2.values.count()* x)無效,因爲值轉換和計數操作不能在rdd1.map轉換中執行。有關更多信息,請參閱SPARK-5063。
我試圖做的另一種方式,這是定義一個函數,然後通過它轉換映射內,如:
def func(y)
data1.filter(lambda z: y[0] in z)
data3 = data2.map(lambda x: [ func(y) for y in x])
但它仍然是同樣的錯誤,顯然是想聰明不壽工作:3 我能做什麼?提前致謝。
那麼,我可以用我的代碼做什麼?我想找到那個結果。 – Kale