2016-10-30 18 views
1

私は、次の操作を行ってRDD[(String, (String, String, Map[String, Int]))]に変換dataFrame = [CUSTOMER_ID ,itemType, eventTimeStamp, valueType]を持っている:Scala/SPARKでDataframeをRDDに変換する効率的な方法は?

val tempFile = result.map({ 
    r => { 
     val customerId = r.getAs[String]("CUSTOMER_ID") 
     val itemType = r.getAs[String]("itemType") 
     val eventTimeStamp = r.getAs[String]("eventTimeStamp") 
     val valueType = r.getAs[Map[String, Int]]("valueType") 
     (customerId, (itemType, eventTimeStamp, valueType)) 
      } 
      }) 

私の私の入力が巨大なので、これは非常に時間がかかります。 dfRDD[(String, (String, String, Map[String, Int]))]に変換する効率的な方法はありますか?

+0

あなたの入力はどれくらいですか? –

+0

DataFrameをRDDに変換するのにどれくらい時間がかかりますか? –

+0

DataFrameに異なる数のパーティションを設定しようとしましたか?違いはありますか? –

答えて

1

あなたが説明した操作は、それが得られるほど安いです。いくつかのgetAsを実行し、いくつかのタプルを割り当てることはほとんど無料です。遅い場合は、大きなデータサイズ(7T)のためにおそらく避けられないことです。また、Catalystの最適化はRDD上で実行できないので、DataFrame操作のこの種の.mapを含むと、他のSparkショートカットがしばしば妨げられます。

関連する問題