Pyspark 星火联谊会;检测到内部联接的笛卡尔积“;

Pyspark 星火联谊会;检测到内部联接的笛卡尔积“;,pyspark,spark-dataframe,apache-spark-2.0,Pyspark,Spark Dataframe,Apache Spark 2.0,我有一个数据帧,我想为每一行添加new\u col=max(一些列0),这些行由一些其他列1分组: maxs = df0.groupBy("catalog").agg(max("row_num").alias("max_num")).withColumnRenamed("catalog", "catalogid") df0.join(maxs, df0.catalog == maxs.catalogid).take(4) 在第二个字符串中,我得到一个错误: AnalysisException:

我有一个数据帧,我想为每一行添加
new\u col=max(一些列0)
,这些行由一些其他列1分组:

maxs = df0.groupBy("catalog").agg(max("row_num").alias("max_num")).withColumnRenamed("catalog", "catalogid")
df0.join(maxs, df0.catalog == maxs.catalogid).take(4)
在第二个字符串中,我得到一个错误:

AnalysisException:检测到之间内部联接的u'笛卡尔积 逻辑计划\n项目。。。使用交叉连接语法允许 这些关系之间的笛卡尔积

我不明白的是:为什么spark在这里找到笛卡尔积

获取此错误的一种可能方法是:我将DF保存到配置单元表,然后再次初始化DF作为SELECTFROM表。或者用配置单元查询替换这两个字符串-没关系。但我不想保存DF。

如中所述,它可能是由以下原因引起的:

这是因为您连接共享相同血统的结构,这导致了一个微不足道的相等条件


至于笛卡尔积是如何产生的?您可以参考。

对于我的加入,笛卡尔积也面临同样的问题。 为了克服它,我在数据帧上使用了别名。参见示例

from pyspark.sql.functions import col

df1.alias("buildings").join(df2.alias("managers"), col("managers.distinguishedName") == col("buildings.manager"))

在加入数据帧之前,请尝试将其持久化。为我工作。

最好在答案中包含所有相关信息,而不仅仅是链接-链接可能会腐烂,但答案文本不会(希望如此)