pandas - 用 pyspark df 中的新元素填充空值
问题描述
我正在尝试找到一种方法来加入两个具有一定colName
共同点的 df,并null
通过使用func()
我有两个 DF
DF1:
+---------------+
| colName|
+---------------+
| a|
| b|
| c|
| d|
+---------------+
和 DF2:
+-------+-------------+
|colName| uuid|
+-------+-------------+
| a| 1|
| b| 2|
+-------+-------------+
使用特定的 pyspark 功能后,DF1.join(DF2, where(DF1.colName == DF2.colName))
或者df.merge()
我想获得具有以下值的 df
DF1 + DF2:
+-------+-------------+
|colName| uuid|
+-------+-------------+
| a| 1|
| b| 2|
| c| null|
| d| null|
+-------+-------------+
然后使用func()
:
def func():
doSomethin(DF1+DF2)
预期结果如下:
+-------+-------------+
|colName| uuid|
+-------+-------------+
| a| 1|
| b| 2|
| c| 3|
| d| 4|
+-------+-------------+
如您所见,DF1
只是有colName
,而DF2
有uuid
关联。所以func()
实际上会生成一个 uuid 并用 distinct 填充colName
distinct uuid
。对此的任何方法将不胜感激。提前致谢。
解决方案
您可以uuid
简单地使用该功能执行此操作。
import pyspark.sql.functions as f
df1.join(df2, ['colName'], 'left') \
.withColumn('uuid', f.coalesce(f.col('uuid'), f.expr('uuid()'))) \
.show(10, False)
+-------+------------------------------------+
|colName|uuid |
+-------+------------------------------------+
|a |1 |
|b |2 |
|c |ad037b01-4be8-40f2-99fc-b7589b2c648c|
|d |e59c9315-b626-4dcf-a80a-e16f08f19a96|
+-------+------------------------------------+
推荐阅读
- .net - .net core 5.0 中的 Usermanager.RemoveFromRoleAsyncIsnotWorkingProperly
- azure - .Net 5 Azure App 服务缺少依赖项
- python - Python将数据框插入“字段列表”中的Mysql表错误未知列
- mule-studio - Anypoint Studio 7.7.0 在启动时失败并出现致命的 Windows 应用程序错误
- matplotlib - 使用 make_classification 数据集从 MLPClassifier 绘制 3D 决策边界
- regex - 引用后匹配其他项目的powershell正则表达式
- python - Col 变量未在统计摘要循环中定义
- javascript - 在 Node JS 中更新 .env 文件中的属性
- vb.net - 仅迭代 for 循环时出现错误 HRESULT E_FAIL
- android - 为什么我的 recyclerView 在 onBindViewHolder 中重做东西?