pyspark加入两个rdds并展平结果

时间:2018-10-15 16:28:14

标签: pyspark rdd

环境是pyspark,Spark版本2.2。

我们有两个Z:\codebase>pipenv uninstall Locking [dev-packages] dependencies. Locking [packages] dependencies. nv\\resolver.py", line 3, in <module> import json ModuleNotFoundError: No module named 'json' Z:\codebase>python Python 3.5.3 (v3.5.3:1880cb95a742, Jan 16 2017, 16:02:32) [MSC v.1900 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import json >>> json <module 'json' from 'C:\\Program Files\\Python35\\lib\\json\\__init__.py'> >>> test1,以下是示例数据

test2

现在,我们要按以下方式生成test1 = [('a', 20), ('b', 10), ('c', 2)] test2 = [('a', 2), ('b', 3)] ,我们将为您提供帮助。

output1

1 个答案:

答案 0 :(得分:1)

您可以通过简单的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转换为DataFrame:

test1.toDF(["key", "value1"]).join(test2.toDF(["key", "value2"]), on="key").show()
#+---+------+------+
#|key|value1|value2|
#+---+------+------+
#|  b|    10|     3|
#|  a|    20|     2|
#+---+------+------+