根据另一个表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计算每一行的主要内容,如果未能解决你的问题,请参考以下文章

根据行号执行 SQL 更新并使用前一行进行计算

对每一行进行复杂计算的 SQL Server 查询

如果 id 不存在于另一个表中,则根据条件使用 sql 计算 id 的编号

spark rdd df dataset

计算 Hive/Spark/SQL 中的每小时进程计数

SQL Server - 将表传递给函数......如何?这是个好主意吗?