Dataframe A(数百万条记录)其中一列是create_date,modified_date
Dataframe B 500记录有start_date和end_date
目前的做法:
Select a.*,b.* from a join b on a.create_date between start_date and end_date
上述工作需要半小时或更长时间才能运行。
如何改善表现
答案 0 :(得分:3)
DataFrame目前还没有像这样直接加入的方法。在执行连接之前,它将完全读取两个表。
https://issues.apache.org/jira/browse/SPARK-16614
您可以使用RDD API来利用joinWithCassandraTable
函数
答案 1 :(得分:0)
正如其他人所说,其中一种方法是广播较小的数据帧。这也可以通过配置以下参数自动完成。
spark.sql.autoBroadcastJoinThreshold
如果数据帧大小小于此处指定的值,Spark会自动广播较小的数据帧而不是执行连接。您可以阅读有关此here的更多信息。