spark join 引发“检测到内部连接的笛卡尔积”

Ale*_*Loo 5 pyspark spark-dataframe apache-spark-2.0

我有一个数据框,我想new_col=max(some_column0)为由其他 column1 分组的每一行添加:

maxs = df0.groupBy("catalog").agg(max("row_num").alias("max_num")).withColumnRenamed("catalog", "catalogid")
df0.join(maxs, df0.catalog == maxs.catalogid).take(4)
Run Code Online (Sandbox Code Playgroud)

在第二个字符串中,我收到一个错误:

AnalysisException: u'检测到逻辑计划之间的 INNER 连接的笛卡尔积\nProject ...使用 CROSS JOIN 语法允许这些关系之间的笛卡尔积。;'

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

获得此错误的一种可能方法:我将 DF 保存到 Hive 表,然后再次初始化 DF 作为从表中选择。或者用 hive 查询替换这 2 个字符串 - 无论如何。但我不想保存DF。

Fra*_*ang 3

正如为什么 Spark 认为这是一个交叉/笛卡尔连接中所述,它可能是由以下原因引起的:

发生这种情况是因为您加入了共享相同谱系的结构,这导致了基本相等的条件。

至于笛卡尔积是如何生成的?您可以参考识别和消除可怕的笛卡尔积

  • 最好在答案本身中包含所有相关信息,而不仅仅是在链接中 - 链接可能会失效,但答案文本不会(希望如此) (3认同)