Schlüsselparameter in der MAX -Funktion in PYSPARK
-
16-10-2019 - |
Frage
In dem Beispiel für die MAX -Funktion für PYSPARK:
>>> rdd = sc.parallelize([1.0, 5.0, 43.0, 10.0])
>>> rdd.max()
43.0
>>> rdd.max(key=str)
5.0
Q1. Wie wird es auf 5.0 bewertet, wenn Key = str? Basierend auf der Konvertierung in Zeichen/String -Typ?
Q2. Gibt es einen Wert, den der Parameter "Schlüssel" annehmen kann?
Ich fand auch die Funktionsdefinition von "max" an diesem Ort
https://github.com/adobe-research/spark-gpu/blob/master/src/rdd.py
def max(self, key=None):
"""
Find the maximum item in this RDD.
:param key: A function used to generate key for comparing
>>> rdd = sc.parallelize([1.0, 5.0, 43.0, 10.0])
>>> rdd.max()
43.0
>>> rdd.max(key=str)
5.0
"""
if key is None:
return self.reduce(max)
return self.reduce(lambda a, b: max(a, b, key=key))
Lösung
Sie übergeben eine Funktion an den Schlüsselparameter, mit dem Sie Ihre Zeilen praktisch auf den Maximalwert überprüfen können. In diesem Fall übergeben Sie die STR -Funktion, die Ihre Schwimmer in Saiten umwandelt. Da '5.0'> '14 .0 'aufgrund der Art der String -Vergleiche zurückgegeben wird. Eine wahrscheinlichere Verwendung ist die Verwendung des Schlüsselparameters wie folgt:
test = sc.parallelize([(1, 2), (4,3), (2,4)])
test.max(key = lambda x: -x[1])
(1,2)
Wegen der - wir sortieren absteigend und das X [1] bedeutet, dass wir den zweiten Eintrag in unseren Tupeln als Schlüssel verwenden.
Andere Tipps
Vergleicht den Wert basierend auf der Position in der Zahl
Die Zahlen werden vom höchsten bis niedrigsten verglichen. Hier 9> 8, wo 8 von 89 stammt:
x = spark.sparkContext.parallelize([1,2,3,4,5,6,7,89,7,33,9])
x.max() #Output 89
x.max(key=str) #Output 9