Я пытаюсь научиться использовать DataFrames и DataSets в дополнение к RDD. Для RDD я знаю, что могу сделать someRDD.reduceByKey((x,y) => x + y)
, но я не вижу эту функцию для Dataset. Поэтому я решил написать одно.
someRdd.map(x => ((x.fromId,x.toId),1)).map(x => collection.mutable.Map(x)).reduce((x,y) => {
val result = mutable.HashMap.empty[(Long,Long),Int]
val keys = mutable.HashSet.empty[(Long,Long)]
y.keys.foreach(z => keys += z)
x.keys.foreach(z => keys += z)
for (elem <- keys) {
val s1 = if(x.contains(elem)) x(elem) else 0
val s2 = if(y.contains(elem)) y(elem) else 0
result(elem) = s1 + s2
}
result
})
Однако это возвращает все драйверу. Как вы могли бы написать это, чтобы вернуть a Dataset
? Может быть, mapPartition и сделать это там?
Обратите внимание, что это компилируется, но не запускается, потому что у него нет кодеров для Map
еще