तो मेरे पास स्ट्रिंग प्रारूप में शब्दों और संख्याओं के साथ एक आरडीडी है जिसे मैंने विराम चिह्न और सफेद जगहों को विभाजित और हटा दिया है:

['Hi', 'today', 'is', 'a', 'great', 'day', 'to', 'gather', 'flowers', 'lets', 'collect', '50', 'Roses', '400', 'Tulips', 'and', '20', 'Sunflowers', 'today']

मैं अलग-अलग शब्दों की संख्या गिनना चाहता हूं और उन्हें वर्णानुक्रम और संख्या क्रम में क्रमबद्ध करना चाहता हूं ताकि आउटपुट कुछ इस तरह दिखे:

(20, 1)
(50, 1)
(400, 1)
('Hi', 1)
('today, 2)

मैंने सॉर्टबी का उपयोग करने की कोशिश की लेकिन मुझे संदेह है क्योंकि संख्याएं तार हैं, यह केवल पहली संख्या से क्रमबद्ध है क्योंकि संख्या 400 50 से पहले आती है। मैं इस मुद्दे को कैसे हल करूं?

1
Aaron 23 अक्टूबर 2020, 20:35

1 उत्तर

सबसे बढ़िया उत्तर

आपको RDD को दो भागों में विभाजित करना होगा और अपनी कमी और छँटाई करनी होगी, फिर परिणाम को बाद में संघटित करना होगा

import re
numbers = (rdd.filter(lambda l: re.match('^[0-9]+$', l))
              .map(lambda l: (int(l), 1))
              .reduceByKey(lambda a,b: a+b)
              .sortByKey())
text = (rdd.filter(lambda l: not re.match('^[0-9]+$', l))
           .map(lambda l: (l, 1))
           .reduceByKey(lambda a,b: a+b)
           .sortByKey())

फिर संघ दोनों:

numbers.union(text).collect()
[(20, 1),
 (50, 1),
 (400, 1),
 ('Hi', 1),
 ('Roses', 1),
 ('Sunflowers', 1),
 ('Tulips', 1),
 ('a', 1),
 ('and', 1),
 ('collect', 1),
 ('day', 1),
 ('flowers', 1),
 ('gather', 1),
 ('great', 1),
 ('is', 1),
 ('lets', 1),
 ('to', 1),
 ('today', 2)]

ऐसा इसलिए है क्योंकि आप अलग-अलग तुलनाओं के साथ एक फ्लैट RDD को सॉर्ट नहीं कर सकते।

1
ernest_k 23 अक्टूबर 2020, 18:35