我想在Spark流式上下文中使用快速连接操作,例如A连接B,A是从文件读取的固定数据集,B是从套接字读取的小型流RDD。我尝试过spark提供的常用方法,5,000,000 RDD加入10个流RDD,费用为4秒。后来我尝试过使用IndexedRDD,但我做不到。我有以下问题:
慢4秒?我可以使用一些性能调整方法,如广播连接来改进吗?如果它很慢,为什么?我听说RDD的连接操作是线性搜索,是真的吗?
IndexedRDD的连接操作能否比常用方法更快?
如何在流式上下文中使用IndexedRDD?我试过这种方式:
streaming_rdd.transform{ rdd =>
indexed_data.innerJoin(IndexedRDD(rdd)){(id, a, b) => (a, b)}
它通过了编译,但在运行时我得到了错误:
java.lang.ClassCastException: scala.collection.immutable.$colon$colon cannot be cast to [Lscala.Tuple2;
我不知道这是否是使用IndexedRDD的正确方法,我也不知道导致此错误的原因。有人可以帮助我吗?