【问题标题】:Join two pyspark dataframes on columns that have multiple values [closed]在具有多个值的列上加入两个 pyspark 数据帧 [关闭]
【发布时间】:2021-04-04 07:11:01
【问题描述】:

为了更好地解释这个问题,假设零售公司(类似于沃尔玛)有不同的产品类别属于主管

并且只是假设有另一个表格表明上述产品类别的利润率

考虑到它是一个多值列,我如何使用 pyspark 将表 1 与表 2 连接到产品类别中。最初的问题有更多列,但这不是问题,因为唯一的区别是我将选择其他列,但连接将基于多值列。

【问题讨论】:

  • 您能否分享您尝试过的代码,这将有助于回答这个问题。您可以将 Product_category 列转换为第一个数据框中的数组并将其分解并与另一个数据框连接
  • 检查 find_in_set 并在连接条件中使用它,F.expr("find_in_set(....)>0")

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


【解决方案1】:

您可以使用contains 条件加入:

df1 = df1.withColumnRenamed('ProductCategory', 'ProductCategory1')
result = df1.join(df2, df1.ProductCategory1.contains(df2.ProductCategory)).drop('ProductCategory1')

result.show()
+----------+---------------+-------------+
|Supervisor|ProductCategory|ProfitMargins|
+----------+---------------+-------------+
|    Joseph|    Electronics|          25%|
|    Joseph|        Kitchen|          20%|
|    Martha|       Clothing|          30%|
+----------+---------------+-------------+

【讨论】:

  • 非常感谢你。这是更时尚、更简单的方法,但对于我的问题,我不希望产品类别两次。当然,我相信我也可以删除额外的专栏。如果有重复的列,我只是不知道该怎么做。虽然我还没有尝试过,但我担心如果使用列名删除它,两者都会被删除。
猜你喜欢
  • 2020-03-27
  • 2022-01-06
  • 2018-09-26
  • 2021-05-16
  • 2018-12-04
  • 1970-01-01
  • 2019-05-29
  • 2023-01-27
  • 1970-01-01
相关资源
最近更新 更多