当前位置: 首页 > 知识库问答 >
问题:

Pyspark数据帧左连接(带默认值)

宣煜
2023-03-14

我有两个数据帧 df1 和 df2。我正在尝试加入(左加入)

DF1:

Name     ID       Age
AA       1        23
BB       2        49
CC       3        76
DD       4        27
EE       5        43
FF       6        34
GG       7        65

df2:

ID      Place
1       Germany
3       Holland
7       India

Final=df1.join(df2,on=['ID'],how='left')

    Name     ID       Age    Place
    AA       1        23     Germany
    BB       2        49     null
    CC       3        76     Holland
    DD       4        27     null
    EE       5        43     null
    FF       6        34     null
    GG       7        65     India

但是,如果Place值为空,我想用名称column值填充

预期输出:

    Name     ID       Age    Place
    AA       1        23     Germany
    BB       2        49     BB
    CC       3        76     Holland
    DD       4        27     DD
    EE       5        43     EE
    FF       6        34     FF
    GG       7        65     India

解决方案,我能想到的是,一旦连接完成,我可以检查Place的值,如果为空,则替换为Name。如果有其他优雅的解决方法,请告诉我。谢谢。

共有1个答案

薛云瀚
2023-03-14

是的,谢谢。经过一些搜索设法使用,如下面的链接所示

from pyspark.sql.functions import coalesce
df1.withColumn("Place",coalesce(df1.Place,df.Name)) 

另一个线程

 类似资料:
  • 假设我有两个数据帧,具有不同级别的信息,如下所示: 我想加入df1和df2,并将“值”信息传递给df2:一天中的每一小时都将获得“日”值。 预期产出:

  • 问题内容: 需要使用意大利语翻译查找所有单词,如果不存在意大利语,则需要使用西班牙语(默认语言)。 我不能使用多个查询,并且存在条件(技术限制) 字 笔译 结果: 这段代码返回了我需要的全部信息,但是我无法在我所处的情况下使用存在条件的地方 问题答案: 我会在桌子上加入桌子两次,每种语言一次:

  • 有很多关于这个问题的帖子,但没有一个回答我的问题。 在尝试将许多不同的数据帧连接在一起时,我在PySpark中遇到了<code>OutOfMemoryError 我的本地机器有16GB内存,我已将Spark配置设置为: 关于Spark中OOM错误的SO帖子显然很多很多,但基本上大多数都是说增加你的内存属性。 我实际上是对50-60个较小的数据帧执行连接,这些数据帧有两列< code>uid和< c

  • 我有两个具有大量(几百万到几千万)行的数据帧。我想为他们牵线搭桥。 在我目前使用的BI系统中,您可以通过首先对特定键进行分区,然后在该键上进行连接来快速完成此操作。 这是我在Spark中需要遵循的模式吗,或者这并不重要?乍一看,在分区之间转移数据似乎浪费了很多时间,因为没有正确地进行预分区。 如果有必要,我该怎么做?

  • 我有两个包含GB数据的大型pyspark数据框df1和df2。第一个数据框中的列是id1,col1。第二个数据框中的列是id2,col2。数据框的行数相等。id1和id2的所有值都是唯一的。id1的所有值也正好对应一个值id2。 因为。前几个条目与df1和df2区域相同,如下所示 DF1: df2: 所以我需要连接键 id1 和 id2 上的两个数据帧。df = df1.join(df2, df1

  • 你能帮我连接两个数据帧吗。 我有两个数据帧。 DF1: DF2: 我需要基于前两个数据帧创建一个数据帧,左连接两列。列index和val2在两个数据帧中具有相同的名称。df3的结果应该如下所示: 应该删除df1中不存在的df2中的索引,如果df1中的索引具有与df2中相同的val2,则应该将1添加到新的列val3中,否则:NaN。 非常感谢提前!