【发布时间】:2018-06-04 05:19:54
【问题描述】:
我有一个包含 150 列和多行的数据框 df1。我还有一个数据框 df2 具有相同的架构,但包含应该应用于 df1 的编辑的行很少(有一个关键列 id确定要更新的行)。 df2 仅包含填充了更新的列。其他列为空。我想要做的是用数据帧 df2 中的相应行更新 df1 中的行,方法如下:
- 如果 df2 中的一列为空,则不应导致 df1 中的任何变化
- 如果 df2 中的列包含波浪号“~”,则应导致 df1 中的该列无效
- 否则 df1 列中的值应替换为 df2 中的值
我怎样才能做到最好?可以在不列出所有列而是迭代它们的情况下以通用方式完成吗?可以使用 dataframe API 完成还是需要切换到 RDD?
(当然,通过更新数据框 df1 我的意思是创建一个新的、更新的数据框。)
示例
假设架构是:id:Int, name:String, age: Int。
df1 是:
1,"Greg",18
2,"Kate",25
3,"Chris",30
df2 是:
1,"Gregory",null
2,~,26
更新后的数据框应如下所示:
1,"Gregory",18
2,null,26
3,"Chris",30
【问题讨论】:
-
你能添加来自 df1 和 df2 的样本数据吗?这样会更容易理解。
-
这是一个非常容易理解的问题,所以我很惊讶您需要一个示例,但我为您提供了一个。
-
您熟悉 SQL 连接吗?
-
是的。您可以在不列出所有 150 列的情况下使用连接吗?给我看。
标签: apache-spark dataframe updates