Присоединяйтесь к СДР и получите минимальное значение - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть несколько rdd и я хочу получить общие слова, присоединившись к нему, и получить минимальное количество. Так что я присоединяюсь и получаю его по следующему коду:

from pyspark import SparkContext
sc = SparkContext("local", "Join app")
x = sc.parallelize([("spark", 1), ("hadoop", 4)])
y = sc.parallelize([("spark", 2), ("hadoop", 5)])
joined = x.join(y).map(lambda x: (x[0], int(x[1]))).reduceByKey(lambda (x,y,z) : (x,y)  if y<=z else (x,z))
final = joined.collect()
print "Join RDD -> %s" % (final)

Но это выдает ошибку ниже:

Аргумент TypeError: int () должен быть строкой или числом, а не «кортежем»

Поэтому я вношу кортеж вместо числа. Не уверен, что вызываетЭто.Любая помощь приветствуется

1 Ответ

1 голос
/ 24 сентября 2019

x.join(other, numPartitions=None): вернуть RDD, содержащий все пары элементов с соответствующими ключами в C {self} и C {other}.Каждая пара элементов будет возвращена как кортеж (k, (v1, v2)), где (k, v1) находится в C {self}, а (k, v2) находится в C {other}.

Поэтому у вас есть кортеж в качестве второго элемента:

In [2]: x.join(y).collect()
Out[2]: [('spark', (1, 2)), ('hadoop', (4, 5))]

Решение:

x = sc.parallelize([("spark", 1), ("hadoop", 4)])
y = sc.parallelize([("spark", 2), ("hadoop", 5)])
joined = x.join(y)
final = joined.map(lambda x: (x[0], min(x[1])))
final.collect()
>>> [('spark', 1), ('hadoop', 4)]
...