Искра сглаживает кадры данных

начало работы со искрой Я хотел бы знать, как flatmap или explode фрейм данных.

Он был создан с использованием df.groupBy("columName").count и имеет следующую структуру, если я его соберу:

 [[Key1, count], [Key2, count2]] 

Но я бы предпочел иметь что-то вроде

Map(bar -> 1, foo -> 1, awesome -> 1)

Что является правильным инструментом для достижения чего-то подобного? Плоская карта, взрыв или что-то еще?

Контекст: я хочу использовать spark-jobserver. Кажется, что он дает значимые результаты (например, работающую сериализацию json) только в том случае, если я предоставляю данные в последней форме.


person Georg Heiler    schedule 11.04.2016    source источник


Ответы (1)


Я предполагаю, что вы вызываете collect или collectAsList на DataFrame? Это вернет Array[Row]/List[Row].

Если это так, самый простой способ преобразовать их в карты — использовать базовый RDD, сопоставить его записи в кортежи ключ-значение и использовать collectAsMap:

def counted = df.groupBy("columName").count()
// obviously, replace "keyColumn" and "valueColumn" with your actual column names
def result = counted.rdd.map(r => (r.getAs[String]("keyColumn"), r.getAs[Long]("valueColumn"))).collectAsMap()

result имеет тип Map[String, Long], как и ожидалось.

person Tzach Zohar    schedule 11.04.2016
comment
К сожалению (хотя формат теперь такой же, как github.com/spark-jobserver/spark-jobserver/blob/master/ пример WordCount. Я все еще получаю не JSON, а свою карту... - person Georg Heiler; 11.04.2016
comment
Я по-прежнему получаю не JSON, а свою карту... что вы имеете в виду? Где? Выполняете ли вы свою работу через REST API сервера (например, используя curl) или вы выполняете основную работу в самой работе? Если это последнее, конечно, вы получите карту, а не JSON, когда вы вызываете метод, возвращающий Map, он возвращает Map, в этом нет никакой магии. - person Tzach Zohar; 11.04.2016
comment
подсчет слов возвращает { результат: {a: 2, b: 2, см.: 1, c: 1} Я получаю результат: Map(1364767200000 -> 1.9517414004122625E15, 1380578400000 -> 6.9480992806496976E16) для моей работы - person Georg Heiler; 11.04.2016