簡體   English   中英

如何使用Spark RDD生成或映射到另一個RDD

[英]How to work with a Spark RDD to produce or map to another RDD

我有一個鍵/值RDD,我想讓它“遍歷”其中的實體(鍵/值),並創建或映射到另一個RDD,該RDD可能具有比第一個RDD更多或更少的條目。

例:

我累積了一些記錄,這些記錄代表着繪畫中對顏色的觀察。 觀察實體/對象保存有關繪畫名稱和繪畫顏色的數據。

Observation
public String getPaintingName() {return paintingName;}
public List<String> getObservedColors() {return colorList}

我將累積的觀察結果作為RDD引入我的代碼中。

val observationRDD: RDD[(Text, Observation)] = getObservationsFromAccumulo();

我想使用此RDD並創建(Color,paintingName)形式的RDD,其中鍵是觀察到的顏色,值是觀察到該顏色的繪畫名稱。

 val colorToPaintingRDD: RDD[(String, String)] = observationRDD.somefunction({ case (_, observation) =>
    for(String color : observations.getObservedColors()) {
       // Some how output a entry into a new RDD
       //output/map (color, observation.getPaintingName)
 })

我知道地圖無法工作,因為它是1到1,我認為可能是observationRDD.flatmap(某些函數),但似乎找不到如何創建新的,更大或更小的RDD的示例。

有人可以幫助我,告訴我平面圖是否正確,如果可以,請使用我提供的示例給我一個例子,或者告訴我我是否偏離標准?

請理解這只是一個簡單的示例,它不是我要問的內容,它是如何將RDD轉換為具有更多或更少條目的RDD。

您應該使用flatmap並在RDD中為每個元素返回一個List [(String,String)]。 FlatMap將平整結果,您將獲得RDD [(String,String)]

我沒有嘗試代碼,但是會是這樣的:

val colorToPaintingRDD: RDD[(String, String)] = observationRDD.flatMap { case (_, observation) =>
    observations.getObservedColors().map(color => (color, observation.getPaintingName))
}

可能如果getObservedColors方法是Java語言,則必須導入JavaConversions並更改為scala列表。

import scala.collection.JavaConversions._
observations.getObservedColors().toList

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM