Spark: Datensätze in Gruppen sortieren?

8

Ich habe eine Reihe von Datensätzen, die ich brauche:

1) Gruppiere nach 'Datum', 'Stadt' und 'Art'

2) Sortieren Sie jede Gruppe nach 'price

In meinem Code:

%Vor%

Wenn ich versuche, die Gruppe zu sortieren, erhalte ich einen Fehler:

%Vor%

Was ist los? Wie sortiere ich?

    
zork 16.02.2015, 14:21
quelle

4 Antworten

10

Sie müssen einen Schlüssel und dann mapValues ​​definieren, um sie zu sortieren.

%Vor%     
gasparms 16.02.2015, 15:10
quelle
7

groupByKey ist teuer, hat zwei Implikationen:

  1. Die Mehrheit der Daten wird im Durchschnitt in den verbleibenden N-1-Partitionen gemischt.
  2. Alle Datensätze desselben Schlüssels werden in den einzelnen Executor geladen und verursachen möglicherweise Speicherfehler.

Abhängig von Ihrem Anwendungsfall haben Sie verschiedene bessere Optionen:

  1. Wenn Ihnen die Reihenfolge egal ist, verwenden Sie reduceByKey oder aggregateByKey.
  2. Wenn Sie nur ohne Transformation gruppieren und sortieren möchten, verwenden Sie am besten repartitionAndSortWithinPartitions (Spark 1.3.0+ Ссылка ), aber seien Sie sehr vorsichtig mit dem von Ihnen angegebenen Partitionierer und testen Sie ihn, da Sie sich jetzt auf Nebenwirkungen verlassen, die das Verhalten in einer anderen Umgebung ändern können. Siehe auch Beispiele in diesem Repository: Ссылка .
  3. Wenn Sie entweder eine Transformation oder eine nicht reduzierbare Aggregation (falten oder scannen) anwenden, die auf die iterierbaren sortierten Datensätze angewendet wird, dann lesen Sie diese Bibliothek aus: spark-sorted Ссылка . Es bietet 3 APIs für gepaarte rdds: mapStreamByKey, foldLeftByKey und scanLeftByKey.
Gianmario Spacagna 12.01.2016 14:52
quelle
0

Ersetzen Sie map durch flatMap

%Vor%

das wird dir ein

geben %Vor%

und dann können Sie sortBy (_._ 1) auf der obigen RDD aufrufen.

    
Soumya Simanta 16.02.2015 15:15
quelle
0

Als Alternative zur @ gasparms-Lösung kann man einen Filter ausprobieren, gefolgt von rdd.sortyBy. Sie filtern jeden Datensatz, der die Schlüsselkriterien erfüllt. Voraussetzung ist, dass Sie alle Ihre Schlüssel (Filterkombinationen) im Auge behalten müssen. Sie können es auch beim Durchqueren von Datensätzen erstellen.

    
nir 19.10.2015 18:58
quelle

Tags und Links