2017-06-02 181 views
0

如何使用Pyspark数据框做pand.concat([df1,df2],axis ='columns')的等效熊猫? 我GOOGLE了,找不到一个好的解决方案。如何在Pyspark中连接/追加多个Spark数据框列?

DF1 
var1   
    3  
    4  
    5  

DF1 
var2 var3  
    23  31 
    44  45 
    52  53 

Expected output dataframe 
var1  var2 var3 
    3  23  31 
    4  44  45 
    5  52  53 

编辑,包括预期的输出

回答

1

下面是你想做的事,但在Scala中,我希望你可以将其转换为pyspark什么例子

val spark = SparkSession 
    .builder() 
    .master("local") 
    .appName("ParquetAppendMode") 
    .getOrCreate() 
    import spark.implicits._ 

    val df1 = spark.sparkContext.parallelize(Seq(
    (1, "abc"), 
    (2, "def"), 
    (3, "hij") 
)).toDF("id", "name") 

    val df2 = spark.sparkContext.parallelize(Seq(
    (19, "x"), 
    (29, "y"), 
    (39, "z") 
)).toDF("age", "address") 

    val schema = StructType(df1.schema.fields ++ df2.schema.fields) 

    val df1df2 = df1.rdd.zip(df2.rdd).map{ 
    case (rowLeft, rowRight) => Row.fromSeq(rowLeft.toSeq ++ rowRight.toSeq)} 

    spark.createDataFrame(df1df2, schema).show() 

这是你怎么做只使用数据帧

import org.apache.spark.sql.functions._ 

val ddf1 = df1.withColumn("row_id", monotonically_increasing_id()) 
val ddf2 = df2.withColumn("row_id", monotonically_increasing_id()) 

val result = ddf1.join(ddf2, Seq("row_id")).drop("row_id") 

result.show() 

添加新列row_id并加入这两个数据帧的密钥为row_id

希望这会有所帮助!

+0

这是否有帮助? –

+0

由于数据帧比RDD更快,我们只能使用火花数据帧来做到这一点? –

+0

这是联合列明智还是行明智 –

相关问题