Wie schließe ich Zeilen anhand einer dynamischen Bedingung in einer PYSPARK -Fensterfunktion aus?Python

Python-Programme
Anonymous
 Wie schließe ich Zeilen anhand einer dynamischen Bedingung in einer PYSPARK -Fensterfunktion aus?

Post by Anonymous »

Ich arbeite mit PySpark und muss eine Fensterfunktion erstellen, die den Median der vorherigen 5 Werte in einer Spalte berechnet. Ich möchte jedoch Zeilen ausschließen, bei denen eine bestimmte Spaltenfunktion wahr ist. Die Herausforderung besteht darin, dass der Wert des Merkmals unterwegs berechnet wird, ähnlich wie der Median, also kann ich es nicht vorher filtern. Eine Möglichkeit, es über das Fenster dynamisch zu berechnen, ohne einen neuen Datenrahmen zu erstellen. < /p>

Code: Select all

from pyspark.sql import SparkSession
from pyspark.sql.functions import col, expr
from pyspark.sql.window import Window
from pyspark.sql.functions import percentile_approx

spark = SparkSession.builder.appName("example").getOrCreate()

data = [
(1, 10), (2, 20), (3, 30), (4, 40), (5, 50), (6, 60),
(7, 70), (8, 80), (9, 90), (10, 100), (11, 110), (12, 20)
]

columns = ["id", "value"]
df = spark.createDataFrame(data, columns)

window_spec = Window.orderBy("id").rowsBetween(-5, 0)

df = df.withColumn(
"median_value",
expr("percentile_approx(value, 0.5)").over(window_spec)
)
df = df.withColumn("feature", median_value > 35)
< /code>
Zum Beispiel bei der Berechnung des Medianes für Zeile 7 Der Median ist 40, was in Zeile 8 zutrifft. Der Median sollte aus den Zeilen 1-6 und 8 überspringen, weil es wahr war.data = [
(1, 10, 10, no),
(2, 20, 10, no),
(3, 30, 20, no),
(4, 40, 20, no),
(5, 50, 30, no),
(6, 60, 30, no),
(7, 70, 40, yes), (this wont be used for the next calculations)
(8, 80, 40, yes), (same)
(9, 90, 40, yes), (same)
(10, 100, 40, yes), (same)
(11, 110, 40, yes), (same)
(12, 20, 30, no)
]

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post