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

按条件使用 sql 之类的分区加入 Pyspark 数据帧

金成济
2023-03-14

如何在sql like partition上通过条件连接两个Pyspark数据帧?我实际上需要连接两个数据框,以便对于每个组(基于一个列变量),我与另一个表外部连接。

例如,我有以下两个数据帧:

DF1:

df2:

所需输出如下:

我尝试过使用Pyspark的< code>Window操作符,但是没有成功,因为它不能用于连接一个窗口。

任何帮助将不胜感激。

共有1个答案

白星腾
2023-03-14

我更愿意说,根据您的输出期望,任何类型的连接都缺少一个逻辑。

但是,看看< code > cross join ,它可能与您的期望密切相关。

>>> df_1.crossJoin(df_2).withColumn("match",  when((df_1.batch==df_2.batch) & (df_1.subject==df_2.subject) , "Yes").otherwise("No")).show()
+-------+-----+---------+-----+---------+-----+
|exam_id|batch|  subject|batch|  subject|match|
+-------+-----+---------+-----+---------+-----+
|      1|   X1|    maths|   X1|    maths|  Yes|
|      1|   X1|    maths|   X1|  english|   No|
|      1|   X1|    maths|   X1|chemistry|   No|
|      1|   X1|  english|   X1|    maths|   No|
|      1|   X1|  english|   X1|  english|  Yes|
|      1|   X1|  english|   X1|chemistry|   No|
|      2|   X1|chemistry|   X1|    maths|   No|
|      2|   X1|chemistry|   X1|  english|   No|
|      2|   X1|chemistry|   X1|chemistry|  Yes|
+-------+-----+---------+-----+---------+-----+
 类似资料:
  • 我正在尝试在PySpark中为两个数据框(df1和df2)创建自定义连接(类似于此),代码如下所示: 我得到的错误消息是: 有没有办法编写一个可以处理来自两个单独数据帧的列的 PySpark UDF?

  • 我在分区后的查询上有一个性能问题。 我每天有一个大约3000万行20列的拼花文件。例如,文件data\u 20210721。拼花地板看起来像: 我们有一个代码来处理它,以便只有一天,并缩短午夜,这样我们就可以: 第2行可以称为残差,因为它与文件不在同一天。 然后,我们希望每天生成1个拼花地板,因此默认的解决方案是处理每个文件并使用以下内容保存数据框: 模式设置为追加,因为第二天,我们可能会有过去/

  • 我有两个具有大量(几百万到几千万)行的数据帧。我想为他们牵线搭桥。 在我目前使用的BI系统中,您可以通过首先对特定键进行分区,然后在该键上进行连接来快速完成此操作。 这是我在Spark中需要遵循的模式吗,或者这并不重要?乍一看,在分区之间转移数据似乎浪费了很多时间,因为没有正确地进行预分区。 如果有必要,我该怎么做?

  • 我需要使用 spark-sql 加载一个 Hive 表,然后对其运行一些机器学习算法。我是这样写的: 它工作得很好,但如果我想增加数据集数据帧的分区数,我该怎么做?使用普通RDD,我可以写: 我想要有N个分区。 谢谢

  • 步骤3我通过for循环加载每个分区,执行聚合,并以追加模式将其保存为文件夹,这样我就有9个模块作为文件夹:、等。它们不按模块分区,只是保存为文件夹。由于我的默认spark numpartitions是,每个模块文件夹都有文件,因此总共有文件 步骤4到目前为止还不错,但是我需要按把它分区回来。因此,我循环遍历每个分区,并将文件保存为一个没有任何分区的parquet文件。这导致总共有文件。我不知道这是

  • 问题内容: 我正在尝试使用Criteria和ProjectionList来获取报告,并且通过hibernate使用它还很新。所以我有这个模型: 我使用以下命令构建查询: 基本上,此方法会收到一个Category和一个userId来过滤付款记录和一个期间,这些人将指示从现在到现在我要累加多少个月。如何获得按月分组的总和结果? 任何帮助或提示,我将不胜感激! 问题答案: 我找到了答案,而且非常简单。我