在Spark中,可以使用zip,union,join等将多个RDD组合成一个......
是否有可能有效地分解RDD?即,不对原始RDD执行多次传递?我正在寻找的东西类似于:
val rdd: RDD[T] = ...
val grouped: Map[K, RDD[T]] = rdd.specialGroupBy(...)
RDD的优势之一是它们能够有效地执行迭代计算。在我遇到的一些(机器学习)用例中,我们需要分别对每个组执行迭代算法。
我所知道的当前可能性是:
GroupBy:groupBy返回RDD [(K,Iterable [T])],它不会为组本身(可迭代)提供RDD好处。
聚合:例如reduceByKey,foldByKey等只执行一次"迭代"在数据上,并没有实现迭代算法的表达能力。
使用过滤方法创建单独的RDD并对数据进行多次传递(其中传递次数等于键的数量),这在键的数量不是很小时是不可行的。
我正在考虑的一些用例,给定一个非常大的(表格)数据集:
我们希望分别对每个不同的列执行一些迭代算法。例如,一些自动化的特征提取,一种自然的方式,就是分解数据集,使每个列都由一个单独的RDD表示。
我们希望将数据集分解为不相交的数据集(例如每天的数据集),并对每个数据集执行一些机器学习建模。
答案 0 :(得分:0)
我认为最好的选择是将每个密钥一次性写入一个文件中的数据(参见Write to multiple outputs by key Spark - one Spark job),然后将每个密钥文件加载到一个RDD中。