Spark专家的一个好问题.
我正在处理map操作(RDD)中的数据.在mapper函数中,我需要查找类的对象A以用于处理RDD中的元素.
由于这将在执行程序上执行,并且类型元素A(将被查找)的创建恰好是一项昂贵的操作,我想在每个执行程序上预加载和缓存这些对象.这样做的最佳方式是什么?
一个想法是广播查找表,但类A不可序列化(无法控制其实现).
另一个想法是将它们加载到单个对象中.但是,我想控制加载到查找表中的内容(例如,可能在不同的Spark作业上有不同的数据).
理想情况下,我想指定一次将在执行程序上加载的内容(包括Streaming的情况,以便查找表在批处理之间保留在内存中),通过驱动程序在启动期间可用的参数,数据得到处理.
是否有干净优雅的方式或无法实现?
对于通过 Spark Streaming 处理的数据的长期存储(多次写入,少量读取),哪个更好的选择:Parquet、HBase 还是 Cassandra?或者是其他东西?有哪些权衡?