在pyspark进行RDD操作

时间:2016-10-13 09:41:34

标签: apache-spark pyspark pyspark-sql

我有两个RDD

x = [("XYZ",12),("ABC",15),("PQR",20)]
y = [("XY",100),("AB",200),("PQR",123),("MNO",111)]

我需要最终结果,例如“XY”是“XYZ”的子字符串,所以我想将这两个元组合并为一个。以上示例的结果如下,

result = [("XYZ",12,100),("ABC",15,200),("PQR",20,123)]

现在我使用for循环实现了这个目的。 有没有更好的方法来解决这个问题?

1 个答案:

答案 0 :(得分:0)

我认为笛卡尔联盟可以解决您的问题:

>>> x.cartesian(y).filter(lambda r: r[1][0] in r[0][0]) \
...     .map(lambda r: (r[0][0], r[0][1], r[1][1])).collect()
[('XYZ', 12, 100), ('ABC', 15, 200), ('PQR', 20, 123)]