Вводные данные:
- Spark 2.4.4
- Hadoop 2.7
Есть датафрейм DF1raw с колонками (a1, b1, c1, d1, e1, f1) и датафрейм DF2raw с колонками (a2, b2, c2, d2, e2, f2)
Формат ORC
* В DF1raw (40 GB) 8.5 млн строк *
* В DF2raw (8GB) 1.7 млн строк *
val DF1 = DF1raw.repartition('a1, 'b1, 'c1, 'e1)
val DF2 = DF2raw.repartition('a2, 'b2, 'c2, 'e2)
1) val DF3 = DF1.join(DF2, a1 == a2 && b1 == b2 && c1 == c2 && d1 == d2, "left") // это отрабатывает, но пока сложность дальше
* В DF3 (500GB) 320 млрд строк *
2) DF3.withColumn("arr", array('c1, 'e1, 'c2, 'e2).drop("a2", "b2").write(...) // ушел в бесконечные вычисления — пишет в HDFS, но медленно
3) DF3.groupBy("a1", "b1").agg(collect_set($"arr" as "arrs") // но пока следует понять то, что с пунктом 2