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

Pyspark连接两个数据帧

戚令秋
2023-03-14

假设我有两个数据帧,具有不同级别的信息,如下所示:

df1
  Month       Day    Values
   Jan      Monday     65      
   Feb      Monday     66
   Mar      Tuesday    68
   Jun      Monday     58 
    

df2
  Month       Day     Hour
   Jan      Monday     5    
   Jan      Monday     5       
   Jan      Monday     8
   Feb      Monday     9
   Feb      Monday     9
   Feb      Monday     9
   Mar      Tuesday    10
   Mar      Tuesday    1
   Jun      Tuesday    2                 
   Jun      Monday     7             
   Jun      Monday     8        

我想加入df1和df2,并将“值”信息传递给df2:一天中的每一小时都将获得“日”值。

预期产出:

   final
      Month       Day     Hour     Value
       Jan      Monday     5         65
       Jan      Monday     5         65
       Jan      Monday     8         65
       Feb      Monday     9         66
       Feb      Monday     9         66
       Feb      Monday     9         66
       Mar      Tuesday    10        68
       Mar      Tuesday    1         68
       Jun      Monday     7         58             
       Jun      Monday     8         58

共有1个答案

魏旭
2023-03-14

这应该是一个简单的连接:

df2 = df2.join(df1, on=['Month', 'Day'], how='inner')

连接将计算所有可能的组合。例如,

df1:
   Jan      Monday     65

df2: 
  Month       Day     Hour
   Jan      Monday     5    
   Jan      Monday     5  

因为所有条目在JanMonday匹配,所以所有可能的组合都将成为输出的一部分:

      Month       Day     Hour     Value
       Jan      Monday     5         65
       Jan      Monday     5         65

注意:是将< code>df1连接到< code>df2上还是反之亦然,以及是使用< code >内还是< code >左连接取决于您希望如何处理不匹配。

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

  • 我有两个火花数据帧。我想基于第二个更新第一个。 数据流1 df2 我想更新第一个数据帧(df1),如下所示 我不知道如何加入嵌套结构中的数据

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

  • 我在pyspark有两个数据框。如下所示,df1保存来自传感器的整个long_lat。第二个数据帧df2是第一个数据帧的子集,其中lat-long值被向上舍入到2位小数,然后删除重复项以保留唯一的lat_long数据点。 DF1: df2: 因此,df2 的行数比第一个少得多。在 df2 中,我应用了一个 udf 来计算状态名称。 现在我想在 df1 中填充状态名称。由于 df2 的 lat_lo

  • 问题内容: 我正在尝试从Amazon s3读取JSON文件以创建spark上下文并使用它来处理数据。 Spark基本上位于docker容器中。因此,将文件放在docker路径中也是PITA。因此将其推送到S3。 以下代码说明了其余内容。 我收到以下错误- 我已经清楚地提供了aswSecretAccessKey和awsAccessId。怎么了 问题答案: 我已经解决了添加到spark-submit命

  • 我正在尝试从Amazon s3读取一个JSON文件,以创建一个火花上下文并使用它来处理数据。 Spark基本上在docker容器中。所以将文件放入docker路径也是PITA。因此将其推送到S3。 下面的代码解释了其余的内容。 我得到以下错误- 我已经清楚地提供了aswSecret AccessKey和awsAccessId。出了什么问题?