【问题标题】:How to join two data frames in Apache Spark and merge keys into one column?如何在 Apache Spark 中加入两个数据框并将键合并为一列?
【发布时间】:2017-02-13 13:35:21
【问题描述】:

我有以下两个 Spark 数据帧:

sale_df:

|user_id|total_sale|
+-------+----------+
|      a|      1100|
|      b|      2100|
|      c|      3300|
|      d|      4400  

和target_df:

 user_id|personalized_target|
+-------+-------------------+
|      b|               1000|
|      c|               2000|
|      d|               3000|
|      e|               4000|
+-------+-------------------+

我怎样才能以输出的方式加入他们:

user_id   total_sale   personalized_target
 a           1100            NA
 b           2100            1000
 c           3300            2000
 d           4400            4000
 e           NA              4000

我已经尝试了几乎所有的连接类型,但似乎单连接无法产生所需的输出。

任何 PySpark 或 SQL 和 HiveContext 都可以提供帮助。

【问题讨论】:

    标签: apache-spark dataframe join pyspark apache-spark-sql


    【解决方案1】:

    您需要执行外部等值连接:

    data1 = [['a', 1100], ['b', 2100], ['c', 3300], ['d', 4400]]
    sales = sqlContext.createDataFrame(data1,['user_id','total_sale'])
    data2 = [['b', 1000],['c',2000],['d',3000],['e',4000]]
    target = sqlContext.createDataFrame(data2,['user_id','personalized_target'])
    
    sales.join(target, 'user_id', "outer").show()
    # +-------+----------+-------------------+
    # |user_id|total_sale|personalized_target|
    # +-------+----------+-------------------+
    # |      e|      null|               4000|
    # |      d|      4400|               3000|
    # |      c|      3300|               2000|
    # |      b|      2100|               1000|
    # |      a|      1100|               null|
    # +-------+----------+-------------------+
    

    【讨论】:

      【解决方案2】:

      您可以在 Scala 中使用等值连接合成器

        val output = sales_df.join(target_df,Seq("user_id"),joinType="outer")
      

      你应该检查它是否在 python 中工作:

         output = sales_df.join(target_df,['user_id'],"outer")
      

      【讨论】:

        猜你喜欢
        • 2021-05-17
        • 1970-01-01
        • 1970-01-01
        • 2020-10-20
        • 1970-01-01
        • 2020-11-13
        • 2021-05-27
        • 2021-11-15
        • 2022-06-20
        相关资源
        最近更新 更多