环境是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
答案 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|
#+---+------+------+