/ / अपाचे स्पार्क - पेयर आरडीडी [बंद] में समान कुंजी / मूल्य जोड़ी को कैसे गिनें - अपाचे-स्पार्क, आरडीडी

अपाचे स्पार्क - पैयरड आरडीडी [बंद] में समान कुंजी / मूल्य जोड़ी की गणना कैसे करें - अपाचे-स्पार्क, आरडीडी

मेरे पास है rdd प्रकार के RDD[(String, String)], मुझे आउटपुट चाहिए RDD[(String, String, Int)] कहा पे int समान सेटों की गणना की जाएगी। उदा:

इनपुट RDD:

java, perl
.Net, php
java, perl

आउटपुट RDD:

java, perl, 2
.Net, php, 1

मैंने जोड़ने की कोशिश की Int (1 के रूप में) में Input RDD, तो अब Input RDD हो जाता है:

[(String, String, Int)] कहा पे Int 1 है

परंतु t.reduceByKey((a,b,c) => (a,b,c)) त्रुटि दे रहा है।

उत्तर:

उत्तर № 1 के लिए 1

आप दो मानों को जोड़कर एक नई कुंजी बना सकते हैं और फिर नीचे दिए गए शो के रूप में जोड़ सकते हैं:

lines = sc.parallelize(["java, perl", ".Net, php", "java, perl"])
splitted = lines.map(lambda l: l.split(","))
processed = splitted.map(lambda l: (l[0] + "," + l[1], 1))
reduced = processed.reduceByKey(lambda a, b: a+b)

या बस पूरी पंक्ति को "कुंजी" मानें:

lines = sc.parallelize(["java, perl", ".Net, php", "java, perl"])
processed = lines.map(lambda l: (l, 1))
reduced = processed.reduceByKey(lambda a, b: a + b)

आउटपुट:

>>> lines.collect()
["java, perl", ".Net, php", "java, perl"]
>>> reduced.collect()
[(".Net, php", 1), ("java, perl", 2)]

संपादित करें:

आप डेटा को प्रारूपित करने और उपयोग करने के लिए एक फ़ंक्शन को परिभाषित कर सकते हैं map परिवर्तन:

def formatter(line):
skills = line[0].split()
return skills[0], skills[1], line[1]

threecols = reduced.map(formatter)