2015-06-13 9 views
7

में GroupedDataSet पर फ़ंक्शनमैप कैसे करें द्वारा उत्पादित प्रत्येक समूह में flatMap के माध्यम से एक फ़ंक्शन लागू करना चाहता हूं। कॉल करने के लिए flatMap मैं संकलक त्रुटि मिलती है की कोशिश कर रहा:Apache Flink

error: value flatMap is not a member of org.apache.flink.api.scala.GroupedDataSet 

मेरे कोड:,

var mapped = env.fromCollection(Array[(Int, Int)]()) 
var groups = mapped.groupBy("myGroupField") 
groups.flatMap(myFunction: (Int, Array[Int]) => Array[(Int, Array[(Int, Int)])]) // error: GroupedDataSet has no member flatMap 

दरअसल flink-scala 0.9-SNAPSHOT कोई map या इसी तरह के दस्तावेज में सूचीबद्ध है। क्या काम करने के लिए एक समान विधि है? एक नोड पर व्यक्तिगत रूप से प्रत्येक समूह पर वांछित वितरित मैपिंग कैसे प्राप्त करें?

उत्तर

4

आप reduceGroup(GroupReduceFunction f) का उपयोग सभी तत्वों को एक समूह पर कार्रवाई कर सकते हैं। एक GroupReduceFunction आपको समूह के सभी तत्वों पर Iterable और तत्वों की मनमानी संख्या को उत्सर्जित करने के लिए Collector देता है।

Flink के groupBy() समारोह नहीं समूह को किसी एक तत्व है, अर्थात में कई तत्वों, यह (Int, Int) तत्वों के एक समूह परिवर्तित नहीं करता है (कि सभी शेयर एक ही _1 टपल क्षेत्र) एक (Int, Array[Int]) में। इसके बजाए, DataSet[(Int, Int)] तर्कसंगत रूप से समूहीकृत है कि सभी तत्वों को एक ही कुंजी के साथ संसाधित किया जा सकता है। जब आप पर GroupReduceFunction लागू करते हैं, तो फ़ंक्शन प्रत्येक समूह के लिए एक बार कॉल किया जाएगा। प्रत्येक कॉल में समूह के सभी तत्वों को फ़ंक्शन में एक साथ सौंप दिया जाता है। फ़ंक्शन तब समूह के सभी तत्वों को संसाधित कर सकता है और (Int, Int) तत्वों के समूह को एक (Int, Array[Int]) तत्व में भी परिवर्तित कर सकता है।