pyspark - spark join 引发 "Detected cartesian product for INNER join"

标签 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)

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

AnalysisException: u'Detected cartesian product for INNER join between logical plans\nProject ... Use the CROSS JOIN syntax to allow cartesian products between these relations.;'



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

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

最佳答案

Why does spark think this is a cross/cartesian join 中所述,这可能是由以下原因引起的:

This happens because you join structures sharing the same lineage and this leads to a trivially equal condition.



至于笛卡尔积是如何产生的?您可以引用Identifying and Eliminating the Dreaded Cartesian Product .

关于pyspark - spark join 引发 "Detected cartesian product for INNER join",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42154476/

相关文章:

apache-spark - 为什么我的 Spark 应用程序只在 1 个执行程序中运行?

json - 使用 sparksql 访问嵌套 json 数据的子字段

scala - 线程 “main”中的异常java.lang.IllegalArgumentException:实例化 'org.apache.spark.sql.hive.HiveSessionState'时出错:

scala - Spark UDF 将列值拆分为多列

python - 如何通过pyspark读取hive分区表

apache-spark - 使用 pyspark 在数据 block 中实现 FileNotFound 异常

python - 如何从 DF 中获取在 pyspark (spark) 中包含值 None 的行

python - 加入一个庞大而庞大的 Spark 数据框

scala - 如何自动创建 StructType 以将 RDD 传递给 DataFrame

apache-spark - 如何尾纱原木?