Итак, у меня есть данные со значениями, которые нужно сложить вместе, а затем поместить в формат Map[String,Long]
для сохранения в Cassandra.
Приведенный ниже код работает, однако мне было интересно, можно ли отобразить картусоздан на основе абстрактного списка столбцов.(Глядя на исходный код для их функций, я только растерялся).
var cols = Array("key", "v1", "v2")
var df = Seq(("a",1,0),("b",1,0),("a",1,1),("b",0,0)).toDF(cols: _*)
val df1 = df.groupBy(col(cols(0))).
agg(map(lit(cols(1)), sum(col(cols(1))), lit(cols(2)), sum(col(cols(2)))) as "map")
Это мой желаемый формат для кадра данных и текущего результата с указанным выше кодом:
scala> df1.show(false)
+---+---------------------+
|key|map |
+---+---------------------+
|b |Map(v1 -> 1, v2 -> 0)|
|a |Map(v1 -> 2, v2 -> 1)|
+---+---------------------+
Я хотел бы видеть функцию, которая может возвращать то же, что и выше, но иметь возможность размещать столбцы программно на основе имени.Например:
var columnNames = Array("v1", "v2")
df.groupBy(col(cols(0))).agg(create_sum_map(columnNames) as "map")
Возможно ли это даже в Spark удаленно?