मैं एक समय विंडो में एकत्रित पाठ की पंक्तियों के साथ स्पार्क-स्ट्रीमिंग एप्लिकेशन में शीर्ष k शब्दों की गणना करना चाहता हूं।शीर्ष के शब्दों की गणना कैसे करें
मैं निम्नलिखित कोड के साथ समाप्त हो गया:
...
val window = stream.window(Seconds(30))
val wc = window
.flatMap(line => line.split(" "))
.map(w => (w, 1))
.reduceByKey(_ + _)
wc.foreachRDD(rdd => {
println("---------------------------------------------------")
rdd.top(10)(Ordering.by(_._2)).zipWithIndex.foreach(println)
})
...
यह काम करने के लिए लगता है।
समस्या: शीर्ष कश्मीर शब्द चार्ट foreachRDD
समारोह प्रत्येक RDD
reduceByKey
द्वारा दिया (wc
चर) पर एक शीर्ष + प्रिंट फ़ंक्शन निष्पादित कि का उपयोग कर की जाती है।
ऐसा लगता है कि reduceByKey
रिटर्न एक भी RDD
के साथ एक DStream
, तो ऊपर दिए गए कोड काम करता है लेकिन सही व्यवहार चश्मा द्वारा इसकी गारंटी नहीं है।
क्या मैं गलत हूं, और यह सभी परिस्थितियों में काम करता है?
क्यों चिंगारी स्ट्रीमिंग में नहीं है, एक तरह से एक DStream
एक भी RDD
के रूप में विचार करने के लिए, RDD
वस्तुओं का संग्रह करने के बजाय, आदेश और अधिक जटिल परिवर्तनों पर अमल करने में?
मेरा मतलब है कि एक कार्य है: dstream.withUnionRDD(rdd => ...)
जो आपको एक एकल/संघ RDD
पर परिवर्तन और क्रियाएं करने की अनुमति देता है। क्या ऐसी चीजों को करने का कोई समकक्ष तरीका है?