apache-spark - 循环通过 rdd.collect() 时创建新的 Spark DataFrame
问题描述
我有一个 Spark 数据框df2
。我正在做一个for row in df2.rdd.collect():
df2 = spark.createDataFrame([
["PROG1","ACTION1","11","IN PROGRESS"],
["PROG2","ACTION2","12","NEW"],
["PROG3","ACTION1","20","FINISHED"],
["PROG4","ACTION4","14","IN PROGRESS"],
["PROG5","ACTION1","20","NEW"]
],["PROGRAM_NAME", "ACTION", "VALUE1", "STATUS"])
for row in DF2.rdd.collect():
# Update sharepoint using patch and get response from Sharepoint (already have the code for this)
就如何寻求帮助:
从中取出所有行df2
,添加一个新列RESPONSE
并创建一个新数据框df3
。
这就是两个数据框的样子
解决方案
您可以通过添加新字段来简单地更新 for 循环中的每一行RESPONSE
,以创建一个新rdd3
的数据框df3
:
rdd3 = []
for row in df2.rdd.collect():
# other staff here
api_response = 200 # set the one from Sharepoint
rdd3.append(Row(**row.asDict(), RESPONSE=api_response))
df3 = spark.createDataFrame(rdd3, df2.columns + ["RESPONSE"])
df3.show()
#+------------+-------+------+-----------+--------+
#|PROGRAM_NAME| ACTION|VALUE1| STATUS|RESPONSE|
#+------------+-------+------+-----------+--------+
#| PROG1|ACTION1| 11|IN PROGRESS| 200|
#| PROG2|ACTION2| 12| NEW| 200|
#| PROG3|ACTION1| 20| FINISHED| 200|
#| PROG4|ACTION4| 14|IN PROGRESS| 200|
#| PROG5|ACTION1| 20| NEW| 200|
#+------------+-------+------+-----------+--------+
推荐阅读
- vba - 如果不存在,则创建文件夹,使用 VBA 在 Windows 操作系统中有效,但在 MAC 操作系统中无效
- function - Rust:将函数/过滤器传递给 Tera 模板
- javascript - 谷歌图片搜索如何获取相似图片的数量
- angular - 如何在 jasmine 中编写单元测试用例?
- java - 将 Kotlin 集合(.find、.map)转换为 Java
- image - 加载图像后 Flutter changenotifier 不更新或调用绘图功能?
- c# - 如何“更改”列表/数组/可枚举中的记录?
- javascript - React hook,使用useState时的连线问题,而如果使用setState可以正常工作,如何解决
- android - Android Kotlin 访问下载目录中的文件 API > 29
- java - 为什么向上转换是自动的,而向下转换不是?