2015-09-22 69 views
0

我發送一個廣播BC到工作節點,在我的程序Sparkr轉換廣播RDD實際價值

BC= SparkR:::broadcast(sc, data) 

我有一個函數

myF=function(x) 
{ 
    allV=SparkR:::value(BC) 
    ..... Use allV ...... 
    return(result) 
} 

然後我打電話這個功能

finalResult = SparkR:::lapply(currentRDD, myF) 

但是,錯誤消息告訴我,allV仍然是PipelineRDD,將allV轉換爲實際數據的正確方法是什麼?

非常感謝!

回答

1

據我瞭解你正在嘗試廣播RDD,這是一些沒有意義的。 RDD只是一個配方或轉換的描述,不包含實際數據。

爲了得到結果,你必須觸發一個動作,比如collect,但是Spark不支持嵌套動作或轉換,所以你試圖實現的是不可能的。

如果數據足夠小,以便在本地處理,你應該collect第一和廣播本地數據結構。如果不可能,您可以使用join RDD。

再次,內部API是內部的原因:)

+0

aha,工作。非常感謝! – user2146141