根据另一个表spark sql计算每一行
Posted
技术标签:
【中文标题】根据另一个表spark sql计算每一行【英文标题】:calculate each row based on another table spark sql 【发布时间】:2018-10-25 11:16:24 【问题描述】:我有一个要求,我需要在我的数据框中计算一列。对于大数据框的每一行,我需要将 from 和 to 与另一个数据框 flag 和 进行比较>date 来计算新列。
基本上,第二个表是一个查找表,需要用于执行我的计算。我可以看到很多洗牌发生,这反过来会影响工作绩效。 例如: 大_DF
+------+----------+----------+
|地点 |从|到|
+------+----------+----------+
| A|2016-03-31|2016-03-31| | A|2016-02-28|2016-02-30| | A|2016-01-31|2016-02-11| | B|2014-12-31|2015-01-10| +------+----------+----------+
+------+----------+----------+
|地点 |日期 |国旗 |
+------+----------+----------+
| A|2016-03-31|是| | A|2016-02-11|没有 | | A|2016-02-11|是| | B|2015-01-10|没有 | +------+----------+----------+
我打算加入 Loc 上的大桌子。外观不会更新,而且很小。有关如何以最佳方式执行此操作的任何建议。
【问题讨论】:
【参考方案1】:您可以通过在加入之前在 DataFrame 上调用广播来提示 Spark SQL 应该广播给定的 DF 以进行加入,例如,
df1.join(broadcast(df2),"key")
广播表很小。
也就是说,你确定加入条件没问题?
【讨论】:
我认为连接条件有问题。我实际上是在计算工作日。在每个 Loc 的小数据集中,将有 365 天带有假期标志。所以当我加入时,我猜它是倾斜的。最初我以为我可以创建 UDF,但似乎无法访问 UDF 内的小数据框。任何建议将不胜感激。 加入是要走的路 那么问题是什么?我认为最初的问题得到了回答。偏度不会在连接中起作用。 我可以在 spark sql 的 where 子句中使用 select 查询吗? 子选择是可能的以上是关于根据另一个表spark sql计算每一行的主要内容,如果未能解决你的问题,请参考以下文章