/ / Apache Spark - Ako spočítať podobný pár kľúč / hodnota v spárovanom RDD [zatvorené] - apache-spark, rdd

Apache Spark - Ako započítať podobný pár kľúča / hodnoty v spárovanom RDD [closed] - apache-spark, rdd

mám rdd typu RDD[(String, String)], Chcem výstup RDD[(String, String, Int)] kde int bude počet podobných súborov. napr .:

Vstup RDD:

java, perl
.Net, php
java, perl

Výstup RDD:

java, perl, 2
.Net, php, 1

Snažil som sa pridať Int (ako 1) v Input RDD, Tak teraz Input RDD sa stáva:

[(String, String, Int)] kde Int je 1.

ale t.reduceByKey((a,b,c) => (a,b,c)) dáva chybu.

odpovede:

1 pre odpoveď č. 1

Nový kľúč môžete vytvoriť spojením dvoch hodnôt a potom pridať nasledujúcim spôsobom:

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)

Alebo jednoducho považujte celý riadok za „kľúčový“:

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

Výkon:

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

EDIT:

Môžete definovať funkciu na formátovanie údajov a použitie súboru map transformácia:

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

threecols = reduced.map(formatter)