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
上述工作需要半小时或更长时间才能运行 .
我怎样才能提高性能
DataFrames目前没有这种直接连接的方法 . 在执行连接之前,它将完全读取两个表 .
https://issues.apache.org/jira/browse/SPARK-16614
您可以使用RDD API来利用 joinWithCassandraTable 功能
joinWithCassandraTable
https://github.com/datastax/spark-cassandra-connector/blob/master/doc/2_loading.md#using-joinwithcassandratable
正如其他人所说,其中一种方法是广播较小的数据帧 . 这也可以通过配置以下参数自动完成 .
spark.sql.autoBroadcastJoinThreshold
如果数据帧大小小于此处指定的值,Spark会自动广播较小的数据帧而不是执行连接 . 你可以阅读更多关于这个here的信息 .
2 回答
DataFrames目前没有这种直接连接的方法 . 在执行连接之前,它将完全读取两个表 .
https://issues.apache.org/jira/browse/SPARK-16614
您可以使用RDD API来利用
joinWithCassandraTable
功能https://github.com/datastax/spark-cassandra-connector/blob/master/doc/2_loading.md#using-joinwithcassandratable
正如其他人所说,其中一种方法是广播较小的数据帧 . 这也可以通过配置以下参数自动完成 .
如果数据帧大小小于此处指定的值,Spark会自动广播较小的数据帧而不是执行连接 . 你可以阅读更多关于这个here的信息 .