Spark最佳方法查找Dataframe以提高性能

时间:2016-08-26 17:27:30

标签: scala apache-spark cassandra datastax-enterprise

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

上述工作需要半小时或更长时间才能运行。

如何改善表现

spark job details

enter image description here

2 个答案:

答案 0 :(得分:3)

DataFrame目前还没有像这样直接加入的方法。在执行连接之前,它将完全读取两个表。

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

答案 1 :(得分:0)

正如其他人所说,其中一种方法是广播较小的数据帧。这也可以通过配置以下参数自动完成。

spark.sql.autoBroadcastJoinThreshold

如果数据帧大小小于此处指定的值,Spark会自动广播较小的数据帧而不是执行连接。您可以阅读有关此here的更多信息。