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"))
在加入数据帧之前,请尝试将其持久化。为我工作。最好在答案中包含所有相关信息,而不仅仅是链接-链接可能会腐烂,但答案文本不会(希望如此)