环境是pyspark,Spark版本2.2。
我们有两个rddstest1
和test2
,以下是示例数据
test1 = [('a', 20), ('b', 10), ('c', 2)]
test2 = [('a', 2), ('b', 3)]
现在我们想生成output1
如下,任何帮助都将受到赞赏。
[('a', 20, 2), ('b', 10, 3)]
您可以通过简单地join
调用map
平坦化值来完成此操作。
test1.join(test2).map(lambda (key, values): (key,) + values).collect()
#[('a', 20, 2), ('b', 10, 3)]
解释一下,结果join
如下:
test1.join(test2).collect()
#[('a', (20, 2)), ('b', (10, 3))]
这几乎是所需的输出,但是您希望将结果展平。我们可以通过调用map
并tuple
以所需格式返回一个新值来完成此操作。该语法(key,)
将仅使用键创建一个元素元组,并将其添加到值中。
您还可以使用DataFrame API,方法pyspark.sql.DataFrame.toDF()
是将RDD转换为DataFrames:
test1.toDF(["key", "value1"]).join(test2.toDF(["key", "value2"]), on="key").show()
#+---+------+------+
#|key|value1|value2|
#+---+------+------+
#| b| 10| 3|
#| a| 20| 2|
#+---+------+------+
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句