2017-06-15 2 views
1

は次のとおりです。シェアsparkRDD使用して、私が実装何のapacheのIgnite

val sparkConf = new SparkConf().setAppName(“SharedRDD”).setMaster(“local”) 
val sc = SparkContext.getOrCreate(sparkConf) 
val sparkRDD = sc.wholeTextFiles("sample.csv", 10) 

これRDDは、今、今後

val igniteContext = new IgniteContext(sc, “example-shared-rdd.xml”, false) 

val sharedIgniteRDD = igniteContext.fromCache[String, String](“cachedIgniteRDD”) 
if (sharedIgniteRDD.isEmpty()) 
sharedIgniteRDD.savePairs(sparkRDD) 

IgniteContext

によってキャッシュされている任意のスパーク仕事をこのRDDにアクセスする必要がある場合、それが作成する必要はありません代わりに新しいものが点火キャッシュからそれを取り出す。入力ファイルの

val RDDfromCache = igniteContext.fromCache[String, String](“CachedIgniteRDD”) 

サンプルデータ

25/07/13,11599,CLOSED 
25/07/13,256,PENDING_PAYMENT 
25/07/13,12111,COMPLETE 
25/07/13,8827,CLOSED 
25/07/13,11318,COMPLETE 
25/07/13,7130,COMPLETE 
25/07/13,4530,COMPLETE 
25/07/13,2911,PROCESSING 
25/07/13,5657,PENDING_PAYMENT 
25/07/13,5648,PENDING_PAYMENT 

私はその入力ファイルのステータス列にグループ分けを行うにgroupByKey()APIを呼び出す必要があります。

あなたのご協力をお待ちしております。 cacheまたはpersist

おかげ

+0

今まであなたの質問に答えてください –

+0

igniteキャッシュに保存する前にまたはignite cacheに保存した後にgroupByKeyを探していますか? –

+0

私はigniteキャッシュに保存した後。 IgniteキャッシュであるRDDfromcacheにgroupByKeyを適用する必要があります。 – Vijay

答えて

1

使用すると、再び再作成するrddを得ることから避けてきたはずです。そして、保存するオプションがあります。rddsin-memorymemory-diskserializeddeserializedなどIgniteContextは上記の解決方法の代替品です。

groupByKeyの保存にはrddが少しありますが、wholeTextFileを使ってテキストファイルを読むと、IgniteContextになります。 WholeTextFileあなたがIgniteContext

val RDDfromCache = igniteContext.fromCache[String, String](“CachedIgniteRDD”) 

の保存rddfromCacheを読んでたら、あなたはgroupByKeyために次の操作を行うことができますTuple2のRDD( "テキストファイルへのパス"、 "テキスト行 S")

を生成します。

val groupedRDD = RDDfromCache.flatMap(x => x._2.split("\n")).map(array => (array.split(",")(2), array)).groupByKey().foreach(println) 

出力は次のようになり

(CLOSED,CompactBuffer(25/07/13,11599,CLOSED, 25/07/13,8827,CLOSED)) 
(PENDING_PAYMENT,CompactBuffer(25/07/13,256,PENDING_PAYMENT, 25/07/13,5657,PENDING_PAYMENT, 25/07/13,5648,PENDING_PAYMENT)) 
............ 
.......... 
.......... 
+0

私はまた、状態に基づいて金額の賢明な合計が必要です(完了、クローズ...) 例: 25/07/2017 11599は、7130 PENDING_PAYMENT 、COMPLETEが26/07/2017 8827、 11318閉じ、PENDING_PAYMENT 12111、 256を閉鎖し、COMPLETE 2911 27/07/2017 、PENDING_PAYMENT 5657、COMPLETE 4530、CLOSED – Vijay

+0

これは別の質問です@ Vijay :)と受け入れてくれてありがとう:) –

+0

ok。ありがとう、そんなに@Ramesh :) – Vijay

0

wholeTextFilesは、ファイル全体を1つのエントリに入れているため、Igniteに保存することはあまり意味がありません。基本的には1つの大きなエントリを持つ分散キャッシュがあります。これは利点を提供しません。

ファイルを分割して、各行を別々のタプルとして保存する必要があります。このデータをIgniteに保存し、RDD APIを使用して処理することができます。

関連する問題