如何在pyspark中加入两个不同的datafrmes?

时间:2019-07-14 18:29:59

标签: pyspark

我有两个数据框,其中一个包含X年,月和度量的列,并且
  与第一天和第二天对应的x1,x2列   天 。第一个数据帧是:

X year month                   measure                   X1        X2
1     1 2014    12          Max.TemperatureF             64        42
2     2 2014    12         Mean.TemperatureF             52        38
3     3 2014    12          Min.TemperatureF             39        33

只有我有日子的第二个数据框。

         X3   X4      X5    X6    X7
         1    51      43    42    45    
         2    44      37    34    42    
         3    37      30    26    38    

所以我想加入两个数据框并在pyspark中获取

 X year month                 measure          X1   X2  X3  X4  X5  X6  
'1     1 2014    12       Max.TemperatureF     64   42  1   51  43  42     
'2     2 2014    12       Mean.TemperatureF    52   38  2   44  37  34  
'3     3 2014    12       Min.TemperatureF     39   33  3   37  30  26     

我已经加入了他们,但是他们在另一个数据框架之上获得了一个数据框架,而不是保持在同一行中

  from functools import reduce 
  from pyspark.sql import DataFrame


  def unionAll(*dfs):
  return reduce(DataFrame.unionAll, dfs)

  td = unionAll(*[weather1, weather2])

        X year month             measure               X1        X2
      1     1 2014    12          Max.TemperatureF     64        42
      2     2 2014    12         Mean.TemperatureF     52        38
      3     3 2014    12          Min.TemperatureF     39        33
            X3      X4    X5    X6    
       1    51      43    42    45    
       2    44      37    34    42    
       3    37      30    26    38

所以这是错误的联接。

1 个答案:

答案 0 :(得分:0)

我想您要尝试的是联接两个表。要连接两个表,您需要一个公共列,并且由于没有公共列,因此您必须创建一些内容。这就是我要解决的方法:

# Copy the entire 'X' column (which I am assuming is the index)
weather2 = weather2.withColumn('X', weather1['X'])

# Join the two tables on 'X'
joinExpr = 'X'
td = weather1.join(weather2, joinExpr)

这应该可以解决问题。