2015-12-03 23 views
8

डेटासेट की सॉर्टपार्टिशन विधि कुछ निर्दिष्ट फ़ील्ड के आधार पर स्थानीय रूप से डेटासेट को टाइप करती है। मैं फ्लिंक में एक कुशल तरीके से वैश्विक स्तर पर अपना बड़ा डेटासेट कैसे प्राप्त कर सकता हूं?अपाचे फ्लिंक में वैश्विक सॉर्टिंग

उत्तर

12

यह वर्तमान में आसानी से संभव नहीं है क्योंकि फ्लिंक एक अंतर्निहित श्रेणी विभाजन रणनीति प्रदान नहीं करता है।

एक काम के आसपास एक कस्टम Partitioner लागू करने के लिए है:

DataSet<Tuple2<Long, Long>> data = ... 
data 
    .partitionCustom(new Partitioner<Long>() { 
    int partition(Long key, int numPartitions) { 
     // your implementation 
    } 
    }, 0) 
    .sortPartition(0, Order.ASCENDING) 
    .writeAsText("/my/output"); 

नोट: विशिष्ट विभाजक साथ संतुलित विभाजन को प्राप्त करने के लिए, आप मूल्य सीमा और चाबी के वितरण के बारे में पता करने की जरूरत है ।

अपाचे फ्लिंक में एक श्रेणी विभाजनकर्ता (स्वचालित नमूनाकरण के साथ) के लिए समर्थन वर्तमान में work in progress है और जल्द ही उपलब्ध होना चाहिए।

संपादित करें (7 जून, 2016): रेंज विभाजन को संस्करण 1.0.0 के साथ अपाचे फ्लिंक में जोड़ा गया था। आप विश्व स्तर पर तरह एक डेटा इस प्रकार सेट कर सकते हैं:

DataSet<Tuple2<Long, Long>> data = ... 
data 
    .partitionByRange(0) 
    .sortPartition(0, Order.ASCENDING) 
    .writeAsText("/my/output"); 

ध्यान दें कि नमूने इनपुट डेटा समान रूप से आकार विभाजन के लिए एक डेटा वितरण की गणना करने के लिए सेट विभाजन करने वाली श्रेणी।

+0

1- यदि हमारे पास डेटासेट पर कोई अंतर्दृष्टि नहीं है, तो हम उन्हें कैसे विभाजित कर सकते हैं? 2- मान लें कि हमें ऐसा करने का कोई तरीका मिल गया है। क्या यह कमांड एक वैश्विक क्रमबद्ध डेटासेट आउटपुट करता है? –

+0

1) यह एक अच्छा मुद्दा है। यदि आप एक कस्टम विभाजनकर्ता को लागू करते हैं, तो आपको संतुलित विभाजन प्राप्त करने के लिए कुंजी की मान सीमा और वितरण के बारे में पता होना चाहिए। लिंक किए गए पुल अनुरोध में श्रेणी विभाजनकर्ता स्वचालित रूप से वितरण प्राप्त करने के लिए डेटा का नमूना देता है। 2) हां, यदि आप विभाजन को श्रेणीबद्ध करते हैं और प्रत्येक विभाजन को एक ही कुंजी पर सॉर्ट करते हैं, तो आउटपुट वैश्विक स्तर पर सॉर्ट किया जाएगा। –

संबंधित मुद्दे