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)]