PySpark如何对两个单行DataFrame的值做除法得到新结果DataFrame
PySpark实现两个单行DataFrame列值相除的方案
因为两个DataFrame的行数都不会超过1行,使用交叉连接(笛卡尔积)不会产生性能问题,完全匹配你SQL写法的逻辑,以下是两种简洁的实现方式:
方案1:DataFrame API写法
直接调用crossJoin方法关联两个表,再计算结果并重命名列即可:
from pyspark.sql.functions import col df_c = df_a.crossJoin(df_b).select((col("A") / col("B")).alias("C"))
方案2:SQL写法
如果你更习惯原生SQL的写法,也可以注册临时视图后直接执行你熟悉的SQL逻辑:
# 注册临时视图 df_a.createOrReplaceTempView("dfa") df_b.createOrReplaceTempView("dfb") # 执行SQL查询 df_c = spark.sql("SELECT dfa.A / dfb.B AS C FROM dfa INNER JOIN dfb ON TRUE")
两种实现的执行效率完全一致,都不会产生多余的shuffle操作,符合你要求的简洁高效的需求。如果其中任意一个DataFrame为空,最终结果也会为空,和你SQL实现的逻辑完全对齐。
内容的提问来源于stack exchange,提问作者amggg013
相关产品推荐
相关产品推荐

