मेरे पास है 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)